【问题标题】:How can I update another Model using a Callback?如何使用回调更新另一个模型?
【发布时间】:2011-06-05 00:48:45
【问题描述】:

我正在使用一个名为 Recover 的模型。在创建模型之前,我想保存布尔属性 Combo.occupied = true 使用 Recover.combo_id 属性作为参考。

看来我的 SQL 正在正确执行查询,但它没有保存此属性。如何保存 Combo.occupied = true?

恢复.rb:

before_create :checkin

受保护

def 签入 x = Combo.find_by_id(combo_id).occupied = 真的
结束

Rails 控制台:

为 127.0.0.1 开始 POST "/recovers" 在 2011-01-06 17:07:24 -0800
处理者 RecoversController#create as HTML
参数:{"utf8"=>"✓", "authenticity_token"=>"o1Iu3Y9/rVBOZPoDUgVP/tRfQ8GxbdWC40DbPq9YxUE=", "恢复"=>{"combo_id"=>"4", "电子邮件"=>"jz@marin.edu"}, “提交”=>“创建恢复”} 恢复 负载 (0.2ms) SELECT "recovers"."id" 从“恢复”到哪里 ("恢复"."email" = 'justin.zollars@marin.edu') 限制 1
恢复负载 (0.1ms) 选择 "recovers"."id" FROM "recovers" WHERE ("恢复"."combo_id" = 4) 限制 1
组合负载(0.5ms)选择“组合”。* FROM "combos" WHERE ("combos"."id" = 4) LIMIT 1 AREL (0.5ms) INSERT INTO “恢复”(“locker_number”,“email”, “请求”,“created_at”, “updated_at”、“combo_id”)值 (NULL,'justin.zollars@marin.edu', 空, '2011-01-07 01:07:24.287072', '2011-01-07 01:07:24.287072', 4) 重定向到 http://localhost:3000/recovers/14 完成 302 发现在 119 毫秒内

RecoversController#create

定义创建 @recover = Recover.new(params[:recover])

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

'恢复已成功创建。') } format.xml { 渲染 :xml => @recover, :status => :created,

:location => @recover }

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

:unprocessable_entity } 结束

end  

结束

【问题讨论】:

  • 您的 RecoversController#create 中似乎没有创建任何对象。可以发一下这个方法的内容吗?

标签: ruby-on-rails callback


【解决方案1】:

您需要调用 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)

【讨论】:

  • 对我来说太晚了,但是 +1 ;)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-08-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-19
  • 2022-01-15
相关资源
最近更新 更多