2

我正在尝试将手动创建的变量传递给我在 Rails 中的模型。

例如我有这样的表格:

<%= form_for(@ncpar) do |f| %>
    <%= f.check_box(:corrective_change) %> Change Corrective Action?
    <%= f.text_area :corrective_desc %>
    <%= f.submit %>
<% end %>

在我的数据库中,没有corrective_change列。它用于我的模型中的手动功能,这意味着它不会保存在数据库中。

在我的模型中,我放了这个:

attr_accessor :corrective_change 
#Cause: Can't mass-assign protected attributes: corrective_change

我也尝试:

attr_accessible :corrective_change
#Cause: unknown attribute: corrective_change

那么将这个变量传递给我的模型并访问它的方法应该是什么?

PS:我可以将使用代码移动corrective_change到我的控制器中,但这会破坏我将其放入模型中的目的,因此我可以让它在保存时自动执行。

4

3 回答 3

2

简短的回答是你可能需要两者:

attr_accessor :corrective_change 
attr_accessible :corrective_change 

这两行做不同的事情,第一行attr_accessor用 getter 和 setter 在你的模型上创建一个公共属性。

第二行attr_accessible允许您通过mass assignment设置此变量。基本上,如果您在控制器中执行以下操作,则没有此行:

@ncpar = NCpar.new(params[:ncpar])

如果有 a :corrective_changeparams[:ncpar]出于安全原因,它将被忽略,除非您明确声明要允许通过批量分配设置该变量:

attr_accessible :corrective_change 
于 2012-05-03T06:28:01.730 回答
0

attr_accessor是你想要的。您只是不希望它受到保护。尝试将attr_accessor指令移到protected模型中的行上方。

于 2012-05-03T05:54:07.280 回答
0

显然,添加

attr_accessor :corrective_change 
attr_accessible :corrective_change 

似乎可以解决问题。

潜在的问题我认为attr_accessor创建 getter 和 setter,但是是私有的。然而,这attr_accessible使得该值变得可公开访问。

于 2012-05-03T06:10:02.183 回答