Ruby   发布时间:2022-04-03  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了ruby-on-rails – Rails如何在保存后更新列?大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我想为我的费率行动创建一个after_save方法.它会划分raTing_score / raTing并更新列的等级.
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

我的导轨日志:

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)

我应该如何创建这个?

解决方法

你想要的是一个回调.您可以在Konkurrancer模型上创建一个after_save回调,该模型在为该模型调用save()方法后触发.

例如:

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(:raTings => raTing)

    end
end

[编辑]您应该使用自己,因为您正在编辑的模型是模型本身.测试它,并应用必要的逻辑/实现.

看看这个guide了解更多信息.

希望有帮助!

大佬总结

以上是大佬教程为你收集整理的ruby-on-rails – Rails如何在保存后更新列?全部内容,希望文章能够帮你解决ruby-on-rails – Rails如何在保存后更新列?所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。