gpt4 book ai didi

ruby-on-rails - Rails 如何在保存后更新列?

转载 作者:数据小太阳 更新时间:2023-10-29 06:37:04 27 4
gpt4 key购买 nike

我想为我的速率操作创建一个 after_save 方法。它将划分 rating_score/ratings 并更新列评级。

class KonkurrancersController < ApplicationController
def rate
@konkurrancer = Konkurrancer.find(params[:id])
@container = "Konkurrancer"+@konkurrancer.id.to_s

@konkurrancer.rating_score += params[:vind][:rating].to_i
@konkurrancer.ratings += 1
@konkurrancer.save

respond_to do |format|
format.js
end
end
end

这是我的模型:

class Konkurrancer < ActiveRecord::Base
after_save :do_foobar

private
def do_foobar

rating_score = self.rating_score
ratings = self.ratings
rating = (rating_score/ratings)
self.update_attributes(:rating => rating)

end
end

我的 Rails 日志:

Started POST "/konkurrancers/rate/46" for 127.0.0.1 at 2011-04-26 23:40:56 +0200

Processing by KonkurrancersController#rate as */*
Parameters: {"utf8"=>"Ô£ô", "authenticity_token"=>"MACFM37hX4S6XA9vryn7gtfl21P
vcaPBSiKDI8mfurg=", "vind"=>{"rating"=>"4"}, "id"=>"46"}
←[1m←[36mKonkurrancer Load (1.0ms)←[0m ←[1mSELECT `konkurrancers`.* FROM `kon
kurrancers`←[0m
←[1m←[35mCACHE (0.0ms)←[0m SELECT `konkurrancers`.* FROM `konkurrancers`
←[1m←[36mCACHE (0.0ms)←[0m ←[1mSELECT `konkurrancers`.* FROM `konkurrancers`←
[0m
←[1m←[35mKonkurrancer Load (1.0ms)←[0m SELECT `konkurrancers`.* FROM `konkurr
ancers` WHERE (`konkurrancers`.`cached_slug` = '46') LIMIT 1
←[1m←[36mSQL (2.0ms)←[0m ←[1mSELECT sluggable_id FROM slugs WHERE ((slugs.slu
ggable_type = 'Konkurrancer' AND slugs.name = '46' AND slugs.sequence = 1))←[0m
←[1m←[35mKonkurrancer Load (1.0ms)←[0m SELECT `konkurrancers`.* FROM `konkurr
ancers` WHERE (`konkurrancers`.`id` = 46) LIMIT 1
←[1m←[36mSQL (0.0ms)←[0m ←[1mBEGIN←[0m
←[1m←[35mLink Load (1.0ms)←[0m SELECT `links`.* FROM `links` WHERE (`links`.k
onkurrancer_id = 46) LIMIT 1
←[1m←[36mSQL (0.0ms)←[0m ←[1mROLLBACK←[0m
Rendered konkurrancers/_rating.html.erb (1.0ms)
Rendered konkurrancers/rate.js.erb (22.0ms)
Completed 200 OK in 606ms (Views: 286.0ms | ActiveRecord: 6.0ms)

我应该如何创建它?

最佳答案

在 Rails3+ 中,after_save 回调中的任何 update_attribute 都会导致递归。应该做的是:

after_save :updater
# Awesome Ruby code
# ...
# ...

private

def updater
self.update_column(:column_name, new_value) # This will skip validation gracefully.
end

关于ruby-on-rails - Rails 如何在保存后更新列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5777172/

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