0
我正在創建一個事件系統,並且遇到了多態聯繫問題。Rails多態聯合表空
事件可以是是:
- 國家:廣播整個組(一組有許多商店)
- 本地:廣播的一個或多個商店
我有兩種類型的鈴聲,在達到閾值後會同時播放:
- specific_media:在該組的其他店鋪廣播媒體在特定媒體在達到treshold該店廣播:在達到閾值
- generic_media店內廣播媒體。
我的模型:
class Event < ActiveRecord::Base
belongs_to :specific_media, polymorphic: true
belongs_to :generic__media, polymorphic: true
has_many :event_join
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
我想eventable_type是要麼店(本地)或組(國家)。所以主要是我想要的是,當我鍵入:
- Shop.first.events:我得到的所有的本地事件(eventable_type:店)
- Group.first.events:我得到的所有國家事件(eventable_type :Group)
我該怎麼做?我在這個多態關聯中出錯了嗎?
最好的問候,