我有3个型号;产品,税和位置。每当产品被创建时,如果有税,我想分配该地点的最新税。
class Location < ActiveRecord::Base
belongs_to :user
has_many :products
has_many :taxes
end
class Tax < ActiveRecord::Base
attr_accessible :date # I use this to get the latest tax
belongs_to :location
has_many :products
end
class Product < ActiveRecord::Base
attr_accessible :tax_id
belongs_to :location
belongs_to :tax
end
现在我在我的Product
模型中尝试了这个:
after_create :assign_latest_location_tax
private
def assign_latest_location_tax
if self.location.tax.present?
self.tax_id = self.location.tax.order("date DESC").first.id
end
end
但这给了我错误:
NoMethodError in ProductsController#create
undefined method `tax' for #<Location:0x4669bf0>
这样做的正确方法是什么?
答案 0 :(得分:3)
位置has_many税,因此它所公开的访问税的方法是taxes
,而不是tax
。
以下内容应该有效:
self.tax_id = self.location.taxes.order("date DESC").first.id
如果您使用after_create
回调,则必须在结束时再次调用save。为避免这种情况,您可以使用before_create
回调。
答案 1 :(得分:1)
此代码应该有效:
def assign_latest_location_tax
if self.location.taxes.count > 0
self.tax_id = self.location.taxes.order("date DESC").first.id
end
end