2011-02-05 22 views
0

私は数多くのRSSフィードを取り出してテーブルに格納するアプリケーションを持っています。条件の各エントリの2つの項目をチェックし、条件に基づいて属性を設定します。モデル内の属性を設定する

if self.value1 > self.value2 then 
    :status => 'foo' 
else 
    :status => 'bar' 
end 

私はまだルビー/レールとのnoobのビットだと、ステータスが例外を引き起こしているが、私はなぜ知らない設定。

助けがあれば助かります。

+1

あなたはself.status = 'foo'を試しましたか? – apneadiving

+0

うまくいきませんでした。 – Synthesezia

答えて

3

「属性を設定する」と言うとき、これはテーブルの別の列であることを意味します。もしそうなら、これは動作するはずです:

if self.value1 > self.value2 
    update_attribute :status, "foo" 
else 
    update_attribute :status, "bar" 
end 

オブジェクトをインスタンス化するとき、または複数の属性(self.update_attributes :animal => "kitten", :sound => "Roar!")を更新するとき、「ロケット」の表記(:this => "that")が使用されています。 Hashが使用する表記です。

status = "foo"を使用することもできますが、保存せずに属性を設定するので、self.saveに電話する必要があります。 update_attributeは両方とも1つのきれいなパッケージに入っています。レール4に

+0

また、 'update_attribute'で検証が行われないことに注意してください。バリデーションを実行するには(おそらく)、 'update_attributes'を" s "と一緒に使います。 [チェックアウト](http://guides.rubyonrails.org/active_record_validations_callbacks.html#validations-overview)。 – chadoh

0

Iは、以下の方法で行った:

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を呼び出す必要はありません。これは、単一のクエリで行われます。

+0

これはほぼ3年前です。私はもはやそれを助ける必要はありません。 – Synthesezia

+0

誰かがこのスニペットの助けを得ることができるなら私はそれを加えました – Baran

関連する問題