So I've got an application which simply takes a number of RSS feeds and stores them in a table. It checks a couple of things in each entry for conditions and then开发者_开发百科 sets an attribute based on the condition.
if self.value1 > self.value2 then
:status => 'foo'
else
:status => 'bar'
end
I'm still a bit of a noob with Ruby/Rails and setting the status is causing an exception but I don't know why.
Any help would be great.
When you say "sets an attribute", I assume that you mean this is another column on the table. If so, this should work:
if self.value1 > self.value2
update_attribute :status, "foo"
else
update_attribute :status, "bar"
end
The "rocket" notation (:this => "that"
) is used when instantiating an object, or when updating more than one attribute (self.update_attributes :animal => "kitten", :sound => "Roar!"
). It's the notation that a Hash uses.
You could also just use status = "foo"
, but that will set the attribute without saving, so you'd also have to call self.save
. update_attribute
does both in one neat package.
In Rails 4 I have done with the following method:
def update_test
if self.value1 > self.value2
self.status="foo"
else
self.status= "bar"
end
end
and added before_update filter in model.
before_update :update_test, :if => :test_changed?
In this method we don't need to call the save or update_attributes this will be done in a single query.
精彩评论