2013-05-07 70 views
5

rails 2.3.11,我在模型不是大规模指派保护的属性可以attr_accessor和attr_accessible

attr_accessor :person_id 

和控制器

@project.person_id = current_user.id 

现在有下面,我在rails 3.2.11转换这和我越来越

Can't mass-assign protected attributes: person_id 

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

attr_accessible :person_id 

但我uisng在控制器PERSON_ID,这里是

@project.person_id = current_user.id 

我得到这个现在

NoMethodError in ProjectsController#create 

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

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

+0

将它们放在'attr_accessible:person_id'; 'attr_accessor:person_id' – 2013-05-07 22:50:20

+0

@ShawnBalestracci如果我同时放置'attr_accessible:person_id'; 'attr_accessor:person_id',我得到了'不能批量分配受保护的属性:person_id' – 2013-05-07 22:58:15

+1

质量分配错误不是来自这一行:'@project.person_id = current_user.id',因为这不是mass-分配。 – Arjan 2013-05-08 09:30:56

回答

5

attr_accessor :person_idattr_accessible :person_id是不一样的。

attr_accessor红宝石方法。总之其用于快捷方式的方法:

def person_id 
    @person_id 
end 

def person_id=(value) 
    @person_id = value 
end 

attr_accessible的Rails方法。其中获得的属性列表允许批量分配。你可以阅读关于。

因此,在你的情况下,你需要他们两个。

attr_accessor :person_id 
attr_accessible :person_id 
+0

如果我放置attr_accessible:person_id; attr_accessor:person_id,我越来越无法批量分配受保护的属性:person_id – 2013-05-08 20:30:54

+0

嗯。在你的'application.rb'中检查'config.active_record.whitelist_attributes = true'。然后尝试使用'true' /'false'来玩 – ck3g 2013-05-09 04:44:46

相关问题