所以我有一个应用程序,只需要一些RSS源并将它们存储在一个表中。它会检查每个条目中的几个条件,然后根据条件设置属性。
if self.value1 > self.value2 then
:status => 'foo'
else
:status => 'bar'
end
我仍然是Ruby / Rails的一个菜鸟,设置状态导致异常,但我不知道为什么。
任何帮助都会很棒。
答案 0 :(得分:3)
当你说“设置属性”时,我认为你的意思是这是桌面上的另一列。如果是这样,这应该有效:
if self.value1 > self.value2
update_attribute :status, "foo"
else
update_attribute :status, "bar"
end
实例化对象或更新多个属性(:this => "that"
)时使用“rocket”表示法(self.update_attributes :animal => "kitten", :sound => "Roar!"
)。这是Hash使用的符号。
您也可以使用status = "foo"
,但这会设置属性而不保存,因此您还必须致电self.save
。 update_attribute
在一个整洁的包中做到了。
答案 1 :(得分:0)
在Rails 4中,我使用了以下方法:
def update_test
if self.value1 > self.value2
self.status="foo"
else
self.status= "bar"
end
end
并在模型中添加了before_update过滤器。
before_update :update_test, :if => :test_changed?
在这个方法中,我们不需要调用save或update_attributes,这将在一个查询中完成。