0

私は 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>

これを行う正しい方法は何ですか?

4

2 に答える 2

3

ロケーションには多くの税金があるため、その税金にアクセスするために公開するメソッドはtaxesではなくtaxです。

以下が機能するはずです。

self.tax_id = self.location.taxes.order("date DESC").first.id

また、コールバックを使用する場合はafter_create、最後にもう一度 save を呼び出す必要があります。これを回避するには、before_createコールバックを使用できます。

于 2012-08-29T11:50:40.053 に答える
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
于 2012-08-29T12:04:14.890 に答える