在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?
答案 0 :(得分:5)
attr_accessor :person_id
和attr_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