我有一个设置模型属性的表单,但是,我想通过代码设置一个属性。也就是说,我希望用户设置一些属性,但我希望程序设置其他属性。
有没有办法做到这一点?
示例:
如果我有一个带有“text”列和“user”列的表,我希望用户输入文本,但我希望程序设置“user”列。我该如何做到这一点?
答案 0 :(得分:2)
不确定。你可以这样做:
def create
@something = Something.new(params[:something])
@something.programmatically_set_attribute = "Some value" #Here's the part that matters
respond_to do |format|
if @host.save
format.html { redirect_to(@something, :notice => 'Something was successfully created.') }
format.xml { render :xml => @something, :status => :created, :location => @something}
else
format.html { render :action => "new" }
format.xml { render :xml => @something.errors, :status => :unprocessable_entity }
end
end
end
在您的表单中,您只需省略您不希望由人手编辑的字段。您还必须更改更新功能。
答案 1 :(得分:0)
如果您想确保只有文本属性可由用户更新,您可能希望使用attr_accessible,如下所示
class MyModel < ActiveRecord::Base attr_accesssible :text end
这将确保只能通过批量分配更新MyModel的text属性。