0

以下のように、互いに関連する4つのモデルがあります。

class User < ActiveRecord::Base
    has_many :clients
    has_many :default_prices
end

class DefaultPrice < ActiveRecord::Base
    has_many :client_prices
    has_many :clients, :through => :user
    belongs_to :user
end

class Client < ActiveRecord::Base
    belongs_to :user
    has_many :client_prices
    before_create do
        user.default_prices.each do |default_price|
            client_prices.build("price" => default_price.price, "visit_type" => default_price.visit_type, "default_price_id" => default_price.id)
        end
    end
end

class ClientPrice < ActiveRecord::Base
    belongs_to :client
    belongs_to :default_price
end

現在、ユーザーが新しいクライアントを作成すると、ユーザーのデフォルトの価格がクライアントの client_prices テーブルに適用されます。ユーザーが新しい default_prices を作成したときに、(既存のクライアントごとに) 新しい client_prices を作成するにはどうすればよいですか? また、デフォルトの価格が変更されたときに client_prices を更新するにはどうすればよいですか? 各クライアントの価格には、デフォルトの価格に関連する default_price_id 列があります。

4

1 に答える 1

0
class DefaultPrice < ActiveRecord::Base
  before_create :new_client_price
  before_update :update_clients_price

private
    def new_client_price
  clients.each do |c|
    self.client_prices.create(:price => self.price, :visit_type => self.visit_type, :client_id => c.id)
        end
end

def update_clients_price
  self.client_prices.each do |p|
      p.price = self.price
        p.visit_type = self.visit_type
      p.save
  end
end
于 2013-01-28T17:29:23.113 に答える