与关节表的多态关联

时间:2015-04-14 10:04:18

标签: ruby-on-rails

昨天我发了一条消息,但我认为我的问题不够具体。

我正在创建一个事件系统,并且我的多态关联有困难。

事件可以是:

  • 国家:为整个群体播放(一个群体有很多商店)
  • 本地:为一家或多家商店播放

我有两种类型的jingles将在达到阈值后同时播放:

  • specific_media :在商店中播放的媒体达到了阈值
  • generic_media :在达到门槛的商店广播特定媒体时,在该群组的其他商店广播的媒体。

我的模特:

class Event < ActiveRecord::Base

  belongs_to :specific_media, polymorphic: true
  belongs_to :generic__media, polymorphic: true
  has_many :event_joins
  accepts_nested_attributes_for :event_joins, allow_destroy: true


class EventJoin < ActiveRecord::Base
  belongs_to :eventable, polymorphic: true
  belongs_to :event
end

class Shop < ActiveRecord::Base
  has_many :event_joins, as: :eventable
  has_many :events,
           :through => :event_joins
end

class Group < ActiveRecord::Base
  has_many :event_joins, as: :eventable
  has_many :events, 
           :through => :event_joins
end

表:

class CreateEvents < ActiveRecord::Migration
  def up
    create_table :events do |t|
      t.string  :title
      t.references :specific_media, polymorphic: true
      t.references :generic_media, polymorphic: true
      t.string  :created_by_id
      t.string  :updated_by_id
      t.float   :threshold
      t.timestamps
    end
  end

  def down
    drop_table :events
  end
end


class CreateEventJoins < ActiveRecord::Migration
  def up
    create_table :event_joins do |t|
      t.integer :event_id
      t.references :eventable, polymorphic: true
      t.boolean :is_active, default: true
      t.string  :created_by
      t.string  :updated_by
    end
   add_index :event_joins, [:eventable_id, :eventable_type]
  end

  def down
    drop_table :event_joins
  end
end

我的控制器:

  def index
    @search   = Search.new(params[:search])
    @shop = find_user_shop(@search.shop_id)
    @events = @shop.events
  end

   def new
     @event = Event.new
   end

   def create
     @search   = Search.new(params[:search])
     @shop = find_user_shop(@search.shop_id)
     @events = @shop.events
     @event = @events.new(params[:event])
     if @event.save!
       flash.now[:notice] = "Votre événement a bien été enregistré"
       render :index
     else
       flash.now[:error] = "Erreur lors de l'enregistrement du événement"
       render :new
    end
  end

事件连接表为空。 在这种多态关联中我哪里出错?

我希望event_type是Shop(本地)或Group(国家)。

致以最诚挚的问候,

0 个答案:

没有答案