我發現了一個名爲acts_as_habtm_list的舊插件 - 但它適用於Rails 1.0.0。acts_as_list與has_and_belongs_to_many的關係
現在這個功能是否構建在acts_as_list中?我似乎無法找到任何信息。
基本上,我有一個artists_events表 - 沒有模型。通過以下兩種模式處理關係:has_and_belongs_to_many
如何在此情況下指定順序?
我發現了一個名爲acts_as_habtm_list的舊插件 - 但它適用於Rails 1.0.0。acts_as_list與has_and_belongs_to_many的關係
現在這個功能是否構建在acts_as_list中?我似乎無法找到任何信息。
基本上,我有一個artists_events表 - 沒有模型。通過以下兩種模式處理關係:has_and_belongs_to_many
如何在此情況下指定順序?
我假設你有兩個模型 - 藝術家和事件。
你想要在他們之間有一個habtm關係,並且你希望能夠爲每個藝術家定義事件的順序。
這是我的解決方案。我從頭上寫這個代碼,但類似的解決方案適用於我的情況。我很確定有一個改進的餘地。
我正在使用rails acts_as_list插件。
這就是我將如何定義模型:
class Artist < ActiveRecord::Base
has_many :artist_events
has_many :events, :through => :artist_events, :order => 'artist_events.position'
end
class Event < ActiveRecord::Base
has_many :artist_events
has_many :artists, :through => :artist_events, :order => 'artist_events.position'
end
class ArtistEvent < ActiveRecord::Base
default_scope :order => 'position'
belongs_to :artist
belongs_to :event
acts_as_list :scope => :artist
end
正如你看到的,你需要一個額外的模型ArtistEvent,加入了另外兩個。 artist_events表應該有兩個外部ID和額外的列位置。
現在你可以使用acts_as_list方法(上ArtistEvent模型,遺憾的是),但像
Artist.find(:ID).events
應該給你屬於特定藝術家在正確的事件列表訂購。
我與自我參照這樣的
class Product < ActiveRecord::Base
has_many :cross_sales
has_many :cross_sales_products, :through => :cross_sales, :order => 'cross_sales.position'
end
class CrossSale < ActiveRecord::Base
default_scope :order => 'cross_sales.position'
belongs_to :product
belongs_to :cross_sales_product, :class_name => "Product"
acts_as_list :scope => :product
end
create_table :cross_sales, :force => true, :id => false do |t|
t.integer :product_id, :cross_sales_product_id, :position
end
但場cross_sales.position從不更新嘗試...
的想法?
更新:好的字段'id'在has_many:through選項的附加模型的情況下是必需的。現在工作很好
在接受的答案中,請注意:order => 'artist_events.position'
引用表artist_events
而不是模型。
從habtm
協會移動到has_many :through
時,我遇到了這個小呃逆。
你能更具體嗎?你究竟想達到什麼目的?另外一個鏈接到你找到的插件會很好。 – EmFi
在尋找插件時,我找到了一個可以使用的新插件:http://github.com/SFEley/habtm_list 我正在嘗試完成藝術家在活動中的順序 - 假設您前往與頂棚和兩個開瓶器的音樂會。我想讓它顯示藝術家在玩的順序。 – mculp