11

私はacts_as_habtm_listという古いプラグインを見つけましたが、それはRails1.0.0用です。

この機能はacts_as_listに組み込まれていますか?情報が見つからないようです。

基本的に、artists_eventsテーブルがあります-モデルはありません。関係は、:has_and_belongs_to_manyを指定する2つのモデルを通じて処理されます

この状況で順序を指定するにはどうすればよいですか?

4

4 に答える 4

23

アーティストとイベントの 2 つのモデルがあるとします。

それらの間に 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

ご覧のとおり、他の 2 つを結合する追加のモデル ArtistEvent が必要です。artist_events テーブルには、2 つの外部 ID と追加の列 (位置) が必要です。

act_as_list メソッドを (残念ながら ArtistEvent モデルで) 使用できるようになりましたが、

Artist.find(:id).events

特定のアーティストに属するイベントのリストを正しい順序で表示する必要があります。

于 2010-02-16T20:48:51.697 に答える
1

私はそのような自己参照で試しています

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 オプションを使用してモデルを追加する場合に必要です。今はうまくいっている

于 2010-03-31T20:18:55.923 に答える