0

テーブル product(id,name) とテーブル product_raiting(product_id,rate_type,rate) があります。新しい製品を作成するとき、この製品に対して 3 つの評価を作成する必要があります。

次のような方法でpostgresトリガーを追加するにはどうすればよいですか:



    product.create
    product.product_raitings.create( :rate_type => 0, :rate => 0 )
    product.product_raitings.create( :rate_type => 1, :rate => 0 )
    product.product_raitings.create( :rate_type => 2, :rate => 0 )
    product.product_raitings.create( :rate_type => 3, :rate => 0 )

助けてください。

4

1 に答える 1

8

データベースにトリガーを作成して、DB が機能するように挿入しますか?

http://www.postgresql.org/docs/9.1/static/sql-createtrigger.html

CREATE FUNCTION addRaitings() RETURNS TRIGGER AS '
   BEGIN
      INSERT INTO product_raitings(product_id,rate_type,rate) values(NEW.id,0,0);
      INSERT INTO product_raitings(product_id,rate_type,rate) values(NEW.id,1,0);
      INSERT INTO product_raitings(product_id,rate_type,rate) values(NEW.id,2,0);
      INSERT INTO product_raitings(product_id,rate_type,rate) values(NEW.id,3,0);
   END;
   ' LANGUAGE plpgsql;

CREATE TRIGGER createRaitingTrigger
        AFTER INSERT ON products
        FOR EACH ROW
        EXECUTE PROCEDURE addRaitings();

それともレールに仕事をさせたいですか?次に、after_createコールバック http://api.rubyonrails.org/classes/ActiveRecord/Callbacks.htmlになります

おそらくこのようなものです。

class Product < ActiveRecord::Base
  has_many product_raitings

  after_create :build_default_raitings

 private
 def build_default_raitings
    (0..3).each { |x| self.product_raitings.create(:rate_type => x, :rate => 0) }
 end
end
于 2013-04-23T18:29:07.233 に答える