0

我在 Rails3 上,我有两个模型,用户和帖子。用户将帖子作为嵌套属性。当我尝试保存用户时,我得到无法批量分配受保护的属性:.....

4

3 回答 3

1

attr_accessible在你的帖子模型中试试这个

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

于 2013-06-06T05:50:10.143 回答
0

如果模型定义如下:

用户.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

于 2013-06-06T05:49:57.453 回答
0

Mass Assignment 是 Rails 赋予使用参数​​哈希构造对象的行为的名称。它是“批量赋值”,因为您通过单个赋值运算符将多个值分配给属性。

以下代码片段执行 Post 模型的名称和主题属性的批量分配:

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

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

有两种情况会失败:

您有一个不包括 :name 的 attr_accessible 声明

你有一个 attr_protected 其中包括 :name

最近,必须通过 attr_accessible 手动将属性列入白名单才能使批量分配成功,这已成为默认设置。在此之前,默认情况下属性是可分配的,除非它们被明确列入黑名单 attr_protected 或任何其他属性被列入 attr_accessible 的白名单。

于 2014-02-24T09:25:35.107 回答