gpt4 book ai didi

ruby-on-rails - rails before_create 不触发方法

转载 作者:行者123 更新时间:2023-12-03 20:27:37 24 4
gpt4 key购买 nike

我正在尝试在保存实例之前触发一个方法。我有 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 (注意通过 binding.pry 使用 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如果验证失败,它将无法进入创建回调

关于ruby-on-rails - rails before_create 不触发方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20750336/

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