2012-02-20 9 views
3

を通じて、私はにhas_manyを使用しています:を通じてパススルー list_itemsと呼ばれるを使用して、2つのモデル間の関連付けを作成するには:ネストされた:has_manyの、:属性

user.rb:

has_many :list_items 
    has_many :wishes, :through => :list_items 

wishe.rbを:

has_many :list_items 
    has_many :users, :through => :list_items 

list_item.rb:

belongs_to :user 
    belongs_to :wish 

これは素晴らしいことですが、(正確には current_user)の基準に基づいてアクセスしたいモデル wishesの追加属性が list_itemsにあります。私は現在、このようなコードを使用してこの属性にアクセスすることができます。

wishes_controller.rb:

@wishes = current_user.wishes 

index.html.haml:

-wish.list_items.each do |list_item| 
    -if list_item.user_id == current_user.id 
     =list_item.list_position 

しかし、私はあります賭けている、正常に動作しますこれを行うもっとエレガントな方法は、 wishes.list_position(current_user idに基づいて適切なlist_positionをプルする)のようにアクセスできることです。私はherehere(そして多くの追加の場所)を見てきましたが、私はこれらの概念をプロジェクトに翻訳できませんでした。

答えて

3

Need data from rails join table, has_many :through

をチェックアウトは、これを試してみてください。
user.rb:

has_many :wishes, :through => :list_items, :select => 'wishes.*, list_items.list_position as list_position'

これは、あなたに与えます:

- @wishes.each do |wish| 
    = wish.list_position 
+0

は完璧に働きました!このコードはlist_position(list_items.list_position)を選択し、それぞれのwishに対してlist_position(list_positionとして)を作成しますか? –

+0

ええ、欲しいものを呼び出すことはできますが、希望のオブジェクトにも 'list_position'属性を持たない限り、それはトリックを行うべきです –

+0

あなたの助けてくれてありがとう! –

関連する問題