无法批量分配受保护的属性attr_accessor和attr_accessible

时间:2013-05-07 22:24:09

标签: ruby ruby-on-rails-3.2

rails 2.3.11中,我在模型

下面
attr_accessor :person_id

并在控制器中

@project.person_id = current_user.id

现在,我正在rails 3.2.11进行转换,我正在

Can't mass-assign protected attributes: person_id

所以我在模型中进行了更改,我从:person_id删除了attr_accessor并添加了以下行

attr_accessible :person_id

但我是控制器中的person_id,这里是

@project.person_id = current_user.id

我现在正在接受这个

NoMethodError in ProjectsController#create

undefined method `person_id=' for #<Project:0x19cc51a>

任何想法或帮助,我该如何解决这个问题?如何处理attr_accessor和amp; attr_accessible?

1 个答案:

答案 0 :(得分:5)

attr_accessor :person_idattr_accessible :person_id不一样。

attr_accessor Ruby 方法。简而言之,它是方法的捷径:

def person_id
  @person_id
end

def person_id=(value)
  @person_id = value
end

attr_accessible Rails 方法。获取允许批量分配的属性列表。您可以阅读here

因此,在您的情况下,您需要两者。

attr_accessor :person_id
attr_accessible :person_id