我对Ruby on Rails上的模型有疑问:
我在Rails上有这个方法,它接收列的名称和该列的新值:
def change_attribute
field = params[:field]
new_value = params[:new_value]
person = Person.find(params[:id])
person.update_attribute(field, new_value)
render :text=>"", :layout=>false
end
但这会引发一个错误:该字段不存在,我认为它应该是:name,:lastname等。
如何将我的字段变量转换为其中一个以使此功能正常工作?
答案 0 :(得分:2)
您应该检查params[:field]
中的字段名称是否与原始字段名称完全相同(没有多余的空格等)。您可以通过puts params[:field].inspect
进行检查并在终端中检查它(rails服务器的启动位置)。
根据update_attribute的文档,我们可以将字符串或符号作为字段名称传递。因此,在将字段参数传递给update_attribute
之前,您无需担心将其转换为符号。正如您所见,来源:
def update_attribute(name, value)
name = name.to_s
raise ActiveRecordError, "#{name} is marked as readonly" if self.class.readonly_attributes.include?(name)
send("#{name}=", value)
save(:validate => false)
end
首先将其转换为字符串,然后调用setter。正如@jdoe所提到的,它没有验证模型(请参阅代码中的save(:validate => false)
行),因此在使用此方法时应注意这一点。