2011-04-22 13 views
0

ドリルのリストを保存できるように、結合モデルの位置列との関連付けをhas_many:throughに設定しました。しかし、今私は、コントローラ内のこれらのオブジェクトと対話する最善の方法を探しています。has_manyを使用した順序付きリストの作成:

注文リストを取得するにはActivity.drillsまたはActivity.drill_listに電話する必要がありますか?

ポジションを維持する最良の方法は何ですか? DrillListのすべてのポジションを手動で更新する必要がありますか?

class Drill < ActiveRecord::Base 
    has_many :drill_list, :order => "position" 
    has_many :activities, :through => :drill_list, :order => "position" 
end 

class DrillList < ActiveRecord::Base 
    belongs_to :activity 
    belongs_to :drill 
end 

class Activity < ActiveRecord::Base 
    has_many :drill_list, :order => "position", :dependent => :destroy 
    has_many :drills, :through => :drill_list, :order => "position" 
end 
+0

ここで何が起こっているのか誰でも説明できますか? – fl00r

答えて

0

drill_listは主に中間モデルであり、余分なデータがある場合にのみ使用する必要があります。

位置を維持するために、インデックス値を設定することはできますが、それは効率的ではありません。代わりに、位置が時間を基準にしている場合は、時間順に注文して、新しいドリルまたは古いドリルを入手することができます。

+0

ありがとうございます。リストを並べ替える機能が必要なので、私はposition colが必要だと思います。ドリル配列を並べ替えるだけで、モデルの位置を更新できるようにしたいと思います。私はそれを処理するためのレールのデフォルトがあることを期待していたが、私はそれを前のフィルタで扱うことを試みると思う。 – jspooner

+0

はい、私はposition属性を使用する方がこの方が良いアイデアだと思います。 – Spyros

0

これはかなり古い投稿だとわかりましたが、過去に私にとってうまくいったもう一つの解決策はacts_as_list - https://github.com/swanandp/acts_as_listです。これは古い宝石ですが、うまく動作し、要素を並べ替えるヘルパーメソッドがいくつかあります。

リストとしての行為は、あなたの終わりに多くの作業をせずにポジションを維持するのに役立ちます。

関連する問題