新手问题 遇到问题 Can't mass-assign protected attributes,麻烦帮忙解答一下

diguage · 2013年02月21日 · 最后由 Heson 回复于 2013年03月14日 · 9789 次阅读

我在看书《Agile Web Development with Rails (4th edition) 》看到第九章时,遇到这么一个问题: Can't mass-assign protected attributes: product

源代码和书上的一样,已经托管到 Github 上: https://github.com/diguage/depot 下载后直接运行,打开 http://127.0.0.1:3000/ 点击 “Add to Cart” 按钮就能看错误。

麻烦熟悉 Rails 的朋友帮忙指点一下,哪里错了?如何解决?谢谢!

补充 发现这个问题后,看来@huacnlee 给的链接内容。发现可能是需要添加 attr_accessible,在 LineItem 末尾,增加 attr_accessible :product 之后,果然可以了。

后来@Heson 也遇到了这个问题。然后,就如上面那样回复。今天又看了一篇帖子,针对这个问题的渊源讲解的更透彻,贴出来,希望对遇到这个问题的朋友有所帮助:

從 Github 被 Hack,談 Rails 的安全性( Mass-assignment ) http://blog.xdite.net/posts/2012/03/05/github-hacked-rails-security/

model 需要写这样的代码,似乎是这样。

class Article < ActiveRecord::Base attr_accessible :title, :content, :brief, :article_type, :qa_id, :pic

end

#1 楼 @huacnlee #2 楼 @chenge 谢谢!问题已经解决。原来是 Rails 修改了安全规则。特别感谢@huacnlee 作为 RubyChina 的重要开发人员(从 Github 上的提交数量看来)还能这么快速地回复实在让人佩服!刚学 Rails,希望您已经多指点指点!

再次感谢二位的热心回复!

#3 楼 @diguage 麻烦问下,你是怎么解决的,我也遇到一样的问题了。。谢谢!

#4 楼 @Heson new 不要带参数。听说有一个 params.permit,不是很确定。

#4 楼 @Heson 我是把整个 Ruby 环境卸载,然后重新安装的。 重新安装请参考: http://www.diguage.com/archives/104.html

抱歉,刚刚的回答搞错了!

如果是看的同一本书,问题解决方法是这样的: 在 LineItem 末尾,增加 attr_accessible :product 即可。(我这里没有问题)

这里有代码,你可以下载下来可以对比一下: https://github.com/diguage/depot 我在每一小节都打了一个 Tag,你可以选择某个小节的代码下。

@huacnlee,我这样解答是否正确?

#5 楼 @chenge #6 楼 @diguage 果然可以~刚刚开始接触这个,出了问题有点手忙脚乱的。。。谢谢 2 位,有问题再请教

需要 登录 后方可回复, 如果你还没有账号请 注册新账号