【发布时间】:2019-01-21 09:24:58
【问题描述】:
我有一个以下Project 模型:
class Project < ApplicationRecord
belongs_to :manager,
class_name: 'User'
has_many :memberships,
dependent: :destroy
has_one :technician_membership, -> { technicians }, class_name: 'Membership'
has_one :technician, through: :technician_membership, class_name: 'User', source: :user
(...)
end
如果新的技术人员被分配到一个项目,我想创建一个通知。我正在苦苦挣扎的是要知道技术人员在保存时是否改变了。
我希望this SO thread 能解决我的问题,但不幸的是它没有。
project.technician
=> nil
project.technician = User.find 4
=> #<User id: 4, ...>
project.technician.changed?
=> false
project.technician_changed?
=> false
检查关联是否已创建/更新的最佳方法是什么?
【问题讨论】:
-
你试过
technician_id_changed吗? -
@LeninRajRajasekaran 我做到了。它返回一个 NoMethodError (
NoMethodError (undefined method 'technician_id_changed?' for #<Project:0x00007f7fef6678f0>)) -
你可以使用association callbacks。
-
project.technician.changed?不起作用,因为您在技术员实例上调用.changed?- 而不是project的属性。technician_id_changed仅在您将belongs_to与项目表上的技术员 ID 列关联时才有效。
标签: ruby-on-rails associations