gpt4 book ai didi

ruby-on-rails - 如何使用回调更新另一个模型?

转载 作者:行者123 更新时间:2023-12-04 07:35:47 25 4
gpt4 key购买 nike

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

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

恢复.rb:

before_create :checkin

protected

def checkin x = Combo.find_by_id(combo_id).occupied = true
end

Rails 控制台:

Started POST "/recovers" for 127.0.0.1 at 2011-01-06 17:07:24 -0800
Processing by RecoversController#create as HTML
Parameters: {"utf8"=>"✓", "authenticity_token"=>"o1Iu3Y9/rVBOZPoDUgVP/tRfQ8GxbdWC40DbPq9YxUE=", "recover"=>{"combo_id"=>"4", "email"=>"jz@marin.edu"}, "commit"=>"Create Recover"} Recover Load (0.2ms) SELECT "recovers"."id" FROM "recovers" WHERE ("recovers"."email" = 'justin.zollars@marin.edu') LIMIT 1
Recover Load (0.1ms) SELECT "recovers"."id" FROM "recovers" WHERE ("recovers"."combo_id" = 4) LIMIT 1
Combo Load (0.5ms) SELECT "combos".* FROM "combos" WHERE ("combos"."id" = 4) LIMIT 1 AREL (0.5ms) INSERT INTO "recovers" ("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) Redirected to http://localhost:3000/recovers/14 Completed 302 Found in 119ms

RecoversController#创建

def create @recover = Recover.new(params[:recover])

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

'Recover was successfully created.') } format.xml { render :xml => @recover, :status => :created,

:location => @recover }

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

:unprocessable_entity } end

end  

end

最佳答案

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

关于ruby-on-rails - 如何使用回调更新另一个模型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4621670/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com