JZ.*_*JZ. 3 ruby-on-rails callback
我正在使用名为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 = true
end
Rails控制台:
在2011-01-06 17:07:24 -0800开始POST"/ recovers"for 127.0.0.1
由RecoversController 处理#create as HTML
参数:{"utf8"=>"✓","authenticity_token"=>"o1Iu3Y9/rVBOZPoDUgVP/tRfQ8GxbdWC40DbPq9YxUE =","recover"=> {"combo_id"=>"4","email"=>"jz@marin.edu"},"commit"=>"创建恢复"}恢复负载(0.2ms )SELECT"恢复"."id"FROM"恢复"WHERE("恢复"."email"='justin.zollars@marin.edu')LIMIT 1
恢复负载(0.1ms)SELECT"恢复"."id"FROM "恢复"WHERE("恢复"."combo_id"= 4)LIMIT 1
组合负载(0.5ms)选择"组合".*FROM"组合"WHERE("组合"."id"= 4)LIMIT 1 AREL(0.5 ms)INSERT INTO"恢复"("locker_number","email","requests","created_at","updated_at","combo_id")VALUES(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 create @recover = Recover.new(params [:recover])
Run Code Online (Sandbox Code Playgroud)respond_to do |format| if @recover.save format.html { redirect_to(@recover, :notice =>'恢复已成功创建.')} format.xml {render:xml => @recover,:status =>:created,
:location => @recover}
Run Code Online (Sandbox Code Playgroud)else format.html { render :action => "new" } format.xml { render :xml => @recover.errors, :status =>:unprocessable_entity}结束
Run Code Online (Sandbox Code Playgroud)end结束
您需要调用save以将新值写入数据库:
def checkin
combo = Combo.find_by_id(combo_id)
combo.occupied = true
combo.save!
end
Run Code Online (Sandbox Code Playgroud)
如果使用,这会更容易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
Run Code Online (Sandbox Code Playgroud)
请注意update_attribute绕过验证.如果您需要验证,请update_attributes(:occupied=>true)改用.
| 归档时间: |
|
| 查看次数: |
1798 次 |
| 最近记录: |