rails before_create不触发方法

ll

我试图在保存实例之前立即触发方法。我有User模型:

class User < ActiveRecord::Base

    has_secure_password
    attr_accessible :name, :first_surname,:second_surname,:email, :password, :password_confirmation,:number,:credit

    before_save{ self.email.downcase! }
    before_create :generate_auth_token

    default_scope order: 'users.created_at ASC'

    has_many :operations

    def consume(what,price,agent)
        self.operations.create(category:what,price:price, agent_id:agent)
    end
end

而每User有许多Operation(注意,这里使用的通过debuger binding.pry

class Operation < ActiveRecord::Base
  attr_accessible :agent_id, :comment, :postcredit, :precredit, :category, :user_id,:price
  validates_presence_of :user_id
  validates_presence_of :agent_id
  validates_presence_of :price
  validates_presence_of :precredit
  validates_presence_of :postcredit
  validates_presence_of :category
  #before_save :compute_prices, :on => :create
  before_create :compute_prices
  belongs_to :user

  private

  def compute_prices
      binding.pry
      user=User.find(self.user_id)
      self.precredit=user.credit
      #select whether adding or subtracting
      if self.category == 'credit'
          self.postcredit=self.precredit+self.price
      else
          self.postcredit=self.precredit-self.price
      end
      user.update_attributes(credit:self.postcredit)
  end
end

我用用户和操作填充数据库,并通过控制台进行测试$rails c --sandbox然后我:

>fi=User.first
>ope=fi.operations.create(category:'credit',price:12.2,agent_id:3)
#Now here the debugger should start and does not

我同时尝试了before_createbefore_save,但均无济于事。

before_create :compute_prices
before_save :compute_prices, :on => :create

唯一可行的选择是after_initialize :compute_prices,但这在每次find初始化后都会触发

有任何想法吗?

如对第一个答案的评论所述,解决方案是针对用户before_validation (function), on: :create,而不是before_save ...

约翰·内格勒

您的操作有效吗?回调生命周期位于此处:http : //api.rubyonrails.org/classes/ActiveRecord/Callbacks.html,如果验证失败,它将无法进入创建回调

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

before_create doesn't work in rails

来自分类Dev

如何在Rails 4中使用Rspec测试before_create方法

来自分类Dev

before_create在Rails中不起作用

来自分类Dev

Rails阻止在before_create回调中创建对象

来自分类Dev

Rails阻止在before_create回调中创建对象

来自分类Dev

Rails before_create从创建帖子渲染“显示”视图时导致id为零

来自分类Dev

使用before_create Rails 4设置到期日期和时间

来自分类Dev

Rails 5.0.1-Friendly_id gem-包含活动关注模块before_create或before_save

来自分类Dev

模型外部的before_create

来自分类Dev

Before_create不起作用

来自分类Dev

before_create没有被调用

来自分类Dev

ActiveRecord忽略关注的before_create挂钩

来自分类Dev

在rails 6上未触发before_save回调

来自分类Dev

ajax:成功不触发ajax rails 4应用

来自分类Dev

Rails:form_for远程不触发Ajax JavaScript

来自分类Dev

在Ruby on Rails中@或不@

来自分类Dev

Rails折返不工作

来自分类Dev

Ruby on Rails方法什么也不返回

来自分类Dev

Ruby on Rails 错误使用 Rails 方法

来自分类Dev

Rails:从 Rails Migration 中的模型调用方法

来自分类Dev

Rails Create方法产生Nil记录

来自分类Dev

什么是before_create,validates_presence_of,has_many等?

来自分类Dev

Ruby on Rails的构建方法

来自分类Dev

rails render:json方法

来自分类Dev

erb rails的调用方法

来自分类Dev

自称的Rails方法

来自分类Dev

Rails定制验证方法

来自分类Dev

Rails:多类方法

来自分类Dev

rails render:json方法