在rails 2.3.11
中,我在模型中有以下内容
attr_accessor :person_id
并在 Controller 中
@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
但我在 Controller 中使用person_id,这是
@project.person_id = current_user.id
我现在得到这个
NoMethodError in ProjectsController#create
undefined method `person_id=' for #<Project:0x19cc51a>
任何想法或帮助,我该如何解决?如何同时处理attr_accessor和attr_accessible?
最佳答案
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
关于ruby - 无法批量分配 protected 属性attr_accessor和attr_accessible,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16429582/