Ruby on rails RubyonRails在数据库中保存一个特定字段
我的数据库中有一个表,它是house,有很多字段,比如“颜色”、“价格”。更新后如何仅保存特定字段 如果我有这个 @house.color=newcolorRuby on rails RubyonRails在数据库中保存一个特定字段,ruby-on-rails,ruby,Ruby On Rails,Ruby,我的数据库中有一个表,它是house,有很多字段,比如“颜色”、“价格”。更新后如何仅保存特定字段 如果我有这个 @house.color=newcolor @豪斯·萨弗 它将保存所有其他字段,包括house.color和house.price(在我的案例中,价格应与颜色同时以编程方式更新,但不应保存。数据库中只应保存house.color) 我试着去做 @house.color=newcolor @房子、颜色、保存 但它显示了我的错误 是否只能保存@house.color的值 感谢您的建议D
@豪斯·萨弗 它将保存所有其他字段,包括house.color和house.price
(在我的案例中,价格应与颜色同时以编程方式更新,但不应保存。数据库中只应保存house.color) 我试着去做 @house.color=newcolor
@房子、颜色、保存 但它显示了我的错误 是否只能保存@house.color的值
感谢您的建议DanSingerman的答案显示了如何更新单个字段 但是,如果价格是一个纯计算值,那么它不应该是表中的字段。但您的模型中有一种方法:
class House < ActiveRecord::Base
def price
return 100 if colour == "red"
return 200
end
end
class House
(这显然是一种“计算”价格的非常简单的方法)
现在您可以像以前一样使用@house.price
,它取决于颜色,但不再是表字段
注意:如果计算复杂,您可以将其“缓存”在类变量中,并覆盖
color=
方法,以便在颜色更改时删除类变量。您可以使用更新精确的字段集
可以使用更新单个字段
有几种方法可以更新持久化对象的特定字段
- 从传入的散列更新模型的属性并保存记录,所有这些都包装在事务中。如果对象无效,则保存将失败并返回false
- 更新其接收器,就像更新一样,但会调用save!而不是保存,因此如果记录无效,将引发异常
-
更新单个属性并保存记录。这对于现有记录上的布尔标志尤其有用。还要注意
- 跳过验证
- 调用回调
- 如果该列可用,则更新列上的updated_at/updated_on
- 更新此对象中的所有脏属性
ActiveRecord::ActiveRecordError
- 更新的别名
-
更新的别名代码>
-
相当于
update\u列(name=>value)
-
发出UPDATE SQL语句,直接在数据库中更新属性,并在接收方中设置它们
这是更新属性的最快方法,因为它直接进入数据库,但要考虑到,因此,常规更新过程完全被忽略。特别是:
- 跳过验证
- 将跳过回调
- 更新时间/更新时间不更新
ActiveRecord::ActiveRecordError
更新
和更新
(因此更新属性
和更新属性!
)调用保存
。因此,在您的情况下,您应该尝试使用update\u column
或update\u columns
我认为这是错误的,至少对于Rails 3来说是错误的,因为这两种方法都调用save-inside,所以所有更改都将被保存。这两种方法都将向数据库提交脏属性。
@house.update_attributes(:colour => newcolour)
@house.update_attribute(:colour, newcolour)