我正在尝试将手动创建的变量传递给我在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
的代码移动到我的控制器中,但这会破坏我将其放入模型中的目的,这样我就可以在保存时自动执行它。
答案 0 :(得分:2)
简短的回答是你可能需要两者:
attr_accessor :corrective_change
attr_accessible :corrective_change
这两行做不同的事情,第一行attr_accessor
使用getter和setter在模型上创建一个公共属性。
第二行attr_accessible
允许您通过mass assignment设置此变量。基本上如果你在控制器中做了类似的事情,你就没有这条线:
@ncpar = NCpar.new(params[:ncpar])
如果:corrective_change
中有params[:ncpar]
,则出于安全原因会忽略它,除非您明确声明要允许通过质量分配设置该变量:
attr_accessible :corrective_change
答案 1 :(得分:0)
attr_accessor
就是你想要的。你只是不希望它受到保护。尝试将attr_accessor
指令移到模型中的protected
行上方。
答案 2 :(得分:0)
显然,添加
attr_accessor :corrective_change
attr_accessible :corrective_change
似乎可以解决问题。
潜在问题我认为attr_accessor
创建getter和setter,但是私有。但是,attr_accessible
会使该值公开访问。