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

AMI*_*ING 5 ruby ruby-on-rails-3.2

rails 2.3.11,我在模型下面

attr_accessor :person_id
Run Code Online (Sandbox Code Playgroud)

并在控制器中

@project.person_id = current_user.id
Run Code Online (Sandbox Code Playgroud)

现在,我正在改变它rails 3.2.11,我正在接受

Can't mass-assign protected attributes: person_id
Run Code Online (Sandbox Code Playgroud)

所以我在模型改变了,我删除:person_idattr_accessor,并添加下面一行

attr_accessible :person_id
Run Code Online (Sandbox Code Playgroud)

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

@project.person_id = current_user.id
Run Code Online (Sandbox Code Playgroud)

我现在得到这个

NoMethodError in ProjectsController#create

undefined method `person_id=' for #<Project:0x19cc51a>
Run Code Online (Sandbox Code Playgroud)

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

ck3*_*k3g 5

attr_accessor :person_id并且attr_accessible :person_id不一样.

attr_accessorRuby方法.简而言之,它是方法的捷径:

def person_id
  @person_id
end

def person_id=(value)
  @person_id = value
end
Run Code Online (Sandbox Code Playgroud)

attr_accessibleRails方法.获取允许批量分配的属性列表.你可以在这里阅读.

因此,在您的情况下,您需要它们.

attr_accessor :person_id
attr_accessible :person_id
Run Code Online (Sandbox Code Playgroud)