2011-01-07 16 views
3

我正在使用名爲Recover的模型。在創建模型之前,我想使用Recover.combo_id屬性作爲參考來保存布爾屬性Combo.occupied = true。如何使用回叫更新另一個模型?

看來我的SQL正在正確執行查詢,但它沒有保存該屬性。我如何保存Combo.occupied = true?

recover.rb:

before_create:籤

保護

DEF籤 X = Combo.find_by_id(combo_id).occupied = 真

Rails控制檯:

在2011-01-06開始POST 「/復甦」 爲127.0.0.1 17時07分24秒-0800
處理由 RecoversController#創建以HTML
參數:{ 「UTF8」=> 「」,「 」authenticity_token「=>」o1Iu3Y9/rVBOZPoDUgVP/tRfQ8GxbdWC40DbPq9YxUE =「, 」recover「=> 「commit」=>「創建恢復」}恢復 加載(0.2ms)選擇「恢復」「id」 「恢復」WHERE (「恢復」。「email」= '[email protected] arin.edu')LIMIT 1
恢復負荷(0.1毫秒)SELECT 「復甦」。 「ID」 FROM 「恢復」 WHERE ( 「復甦」。 「combo_id」= 4)LIMIT 1
組合負荷(0.5ms的)SELECT「combos」* FROM「combos」WHERE(「combos」。「id」= 4)LIMIT 1 AREL(0.5ms)INSERT INTO 「恢復」(「locker_number」,「email」, 「 (NULL,'[email protected]', NULL,'2011-01-07 01:07:24.287072', '2011- 01-07 01:07:24.287072',4) 重定向到 http://localhost:3000/recovers/14 已完成302在119ms

RecoversController#實測值創建

DEF創建 @recover = Recover.new(PARAMS [:恢復])

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 2011-01-07 01:24:59

+0

當然可以。它完成 – 2011-01-07 01:27:37

回答

5

您需要調用保存才能將新值寫入數據庫:

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)

相關問題