我正在使用名为Recover的模型。在创建模型之前,我想使用Recover.combo_id属性作为参考来保存布尔属性Combo.occupied = true。
看来我的SQL正在正确执行查询,但它没有保存此属性。如何保存Combo.occupied = true?
recover.rb:
before_create:checkin
保护
def checkin x = Combo.find_by_id(combo_id).occupied = 真正
端
Rails控制台:
为127.0.0.1开始POST“/恢复” 在2011-01-06 17:07:24 -0800
处理方式 RecoversController#创建为HTML
参数:{“utf8”=>“✓”, “authenticity_token”=> “中o1Iu3Y9 / rVBOZPoDUgVP / tRfQ8GxbdWC40DbPq9YxUE =”, “恢复”=> { “combo_id”=> “中4”, “电子邮件”=> “中jz@marin.edu”}, “commit”=>“创建恢复”}恢复 加载(0.2ms)SELECT“恢复”。“id” 从“恢复”WHERE (“恢复”。“电子邮件”= 'justin.zollars@marin.edu')限制1
恢复负载(0.1ms)SELECT “恢复”。“id”FROM“恢复”在哪里 (“恢复”。“combo_id”= 4)限制1
组合负载(0.5ms)SELECT“组合”。* FROM“combos”WHERE(“combos”。“id”= 4)LIMIT 1 AREL(0.5ms)INSERT INTO “恢复”(“locker_number”,“电子邮件”, “requests”,“created_at”, “updated_at”,“combo_id”)价值观 (NULL,'justin.zollars@marin.edu', 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 [:recover])
respond_to do |format| if @recover.save format.html { redirect_to(@recover, :notice =>
'已成功创建恢复。')} format.xml {render:xml => @recover,:status => :创建
:location => @recover}
else format.html { render :action => "new" } format.xml { render :xml => @recover.errors, :status =>
:unprocessable_entity} 端
end
端
答案 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)
。