为nested_attributes获得"Can't mass-assign protected attributes:"



我在Rails3上,我有两个模型,User和Post。用户将Posts作为嵌套属性。当我试图保存用户然后我得到不能批量分配保护属性:.....

在你的post模型中试试这个attr_accessible

http://railscasts.com/episodes/26-hackers-love-mass-assignment

如果模型定义如下:

user.rb

class User < ActiveRecord::Base
  attr_accessible  :name, :posts_attributes
  has_many :posts
  accepts_nested_attributes_for :posts
end

post.rb

class Post < ActiveRecord::Base
  attr_accessible :title, :content :user_id
end

那么一切都应该没问题。您可以将用户与帖子保存为嵌套属性。

这里是初学者的示例代码:)

https://github.com/railscash/sample_change_user_role

Mass Assignment是Rails给使用参数散列构造对象的行为起的名字。它是"批量赋值",因为您通过单个赋值操作符将多个值赋给属性。

下面的代码片段对Post模型的name和topic属性执行大量赋值:

Post.new(:name => "John", :topic => "Something")
Post.create(:name => "John", :topic => "Something")
Post.update_attributes(:name => "John", :topic => "Something")

为了使它工作,你的模型必须允许对你传入的哈希中的每个属性进行大量分配。

有两种情况会失败:

你有一个attr_accessible声明,它不包括:name

你有一个attr_protected,它包含:name

最近,必须通过attr_accessible手动将属性列入白名单,以使大规模赋值成功,这已成为默认。在此之前,默认情况下属性是可分配的,除非它们被显式地列入黑名单attr_protected或任何其他属性被列入白名单attr_accessible。

相关内容

  • 没有找到相关文章

最新更新