所以我真的很难做到这一点......基本上我想做的是保存或创建过程记录时我想检查状态是否设置为已完成。然后,如果是,那么继续创建一个关联的交易记录,其中包含过程记录中的详细信息。
但是我继续为nil获得*** NoMethodError Exception: undefined method
create':NilClass“`
只是不确定去哪里!!
class Procedure < ActiveRecord::Base
store_accessor :properties, :tooth, :buccal, :mesial, :occlusal, :distal, :lingual
belongs_to :item
belongs_to :patient
belongs_to :practice
belongs_to :provider
belongs_to :operatory
belongs_to :appointment
belongs_to :transaction
before_create :create_transaction
before_save :create_transaction
before_save :check_if_was_marked_as_complete
validates :item, :patient, :provider, :date, presence: true
validates_associated :item, :patient, :provider
private
def create_transaction
if status == "completed"
transaction.create do |t|
t.amount = fee
#t.practice = self.practice
t.debit_account = patient.family.account
t.credit_account = provider.revenue_account
#t.patient = self.patient
end
end
end
def check_if_was_marked_as_complete
if self.status_was == "completed"
return false
else
return true
end
end
end
编辑 * 我的方法现在看起来像这样
def create_association
if status == "completed"
create_transaction do |t|
t.amount = fee
#t.practice = self.practice
t.debit_account = patient.family.account
t.credit_account = provider.revenue_account
#t.patient = self.patient
end
end
end
答案 0 :(得分:1)
您的交易是nil
,直到它存在。所以procedure.transaction #=> nil
和nil.create #=> undefined method create for nil
。
要在belongs_to关联中构建关联对象,您可以使用以下方法:
由关联对象替换(即build_transaction,create_transaction等)
您应该做的第一件事是重命名回调create_association
,因为此方法仍由Rails定义。
然后在你的回调中:
create_transaction do |t|
# ...
end