3

我对 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 等。

如何将我的字段变量动态地转换为其中一个以使此功能起作用?

4

1 回答 1

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)代码中的行),因此在使用此方法时应该注意这一点。

于 2012-05-25T07:21:14.003 回答