2011-01-07 14 views
3

私はRecoverというモデルを使っています。モデルを作成する前に、Recover.combo_id属性を参照としてboolean属性Combo.occupied = trueを保存したいと思います。コールバックを使用して別のモデルを更新するにはどうすればよいですか?

私のSQLはクエリを正しく実行していますが、この属性は保存されていません。どうすればCombo.occupied = trueを保存できますか?

recover.rb:

before_create:

DEF X = Combo.find_by_id(combo_id).occupied = 真
端をチェックインを保護チェックイン

Railsコンソール:

がPOSTを開始 RecoversController#で127.0.0.1 処理
-0800 17時07分24秒2011年1月6日には、 "/回復" HTML
パラメータとして作成します:{ "UTF8" => "✓"、 "authenticity_token" => "o1Iu3Y9/rVBOZPoDUgVP/tRfQ8GxbdWC40DbPq9YxUE ="、 "回復" => { "combo_id" => "4"、 "電子メール" => "[email protected]"}、 "コミット" => "リカバー作成"}リカバリー ロード(0.2ms)SELECT "回復" "ID" FROM "回復" WHERE ( "回復"。 "電子メール" = '[email protected] arin.edu ')LIMIT 1
は、Load(0.1msを回復) ( "回復"。 "combo_id" = 4)LIMIT 1
コンボ・ロード(0.5ミリ秒を "回復" を "回復"。 "ID" を選択) "combos"を選択してください* "combos" WHERE( "combos"。 "id" = 4)LIMIT 1 AREL(0.5ms)INSERT INTO "回復"( "locker_number"、 "email"、 "リクエスト」、 "のcreated_at"、 "updated_atの"、 "combo_id") (NULL、 '[email protected]' NULL、 '2011-01-07 01:07:24.287072' 値、 「に2011- 01-07 01:07:24.287072 '、4) http://localhost:3000/recovers/14にリダイレクトされましたDEF @recover = Recover.new([:回復]のparams)を作成

を作成119ms

RecoversController#で発見302を完成回復」

respond_to do |format| 
    if @recover.save 
    format.html { redirect_to(@recover, :notice => 

が正常に作成されました。 ')} 形式です。XML {レンダリング:XML => @recover:ステータス=>:作成、

:場所=> @recover}

else 
    format.html { render :action => "new" } 
    format.xml { render :xml => @recover.errors, :status => 

:unprocessable_entity} 端

end 

+0

RecoversController#createにオブジェクトが作成されていないようです。このメソッドの内容を投稿できますか? – apneadiving

+0

確かです。その完了 –

答えて

5

新しい値をデータベースに書き込むには、saveを呼び出す必要があります。

def checkin 
    combo = Combo.find_by_id(combo_id) 
    combo.occupied = true 
    combo.save! 
end 

これは、update_attributeを使用すると簡単です。あなたはbelongs_toの関係を持っている場合にも、あなたはfindで済ますことができます。

belongs_to :combo 

def checkin 
    if combo # true unless combo_id is nil 
    combo.update_attribute(:occupied,true) 
    end 
end 

update_attributeが検証をバイパスすること。検証が必要な場合は、代わりにupdate_attributes(:occupied=>true)を使用してください。

+0

素晴らしい!私は間違った方法(保存)を使用していた、忘れてしまった! –

+0

私にとっては遅すぎるが、+1;) – apneadiving

関連する問題