1

Rails 3 ベータ 4 を使用しています。

私は次のモデルを持っています:

class Player < ActiveRecord::Base
has_many :players_items, :dependent => :destroy 
has_many  :items, :through => :players_items
end

class PlayersItem < ActiveRecord::Base
  belongs_to :player 
  belongs_to :item  
end

class Item < ActiveRecord::Base
  has_many :players_items, :dependent => :destroy
  has_many :players, :through =>  :players_items
end

プレーヤー_コントローラーで

def items
    @player = Player.find(params[:id])
    @player_items = @player.items
  end

私は次の属性を持っています

--Items Model--
Item_id:Integer
Name:String
Cost:Integer
Description:Text

--PlayersItem Model--
Item_id:Integer
Player_id:Integer
Total:Integer
Traded:Integer

プレーヤーに関連付けられたすべてのアイテムを印刷しようとしています。各アイテムについて、「名前」、「コスト」、「説明」、「合計」、および「取引」の値を印刷します。

items.html.erb で @player_items を呼び出すと、Item モデルに関連付けられた属性にのみアクセスでき、PlayersItem モデルに関連付けられた属性にはアクセスできません。

このような SQL Join ステートメントに似た同じ「呼び出し」で、アイテムモデルとplayers_itemsモデルの両方から属性にアクセスしようとしています

SELECT * FROM players_items INNER JOIN items ON players_items.item_id=items.id  
WHERE players_items.player_id = "@player"

これは可能ですか?

4

2 に答える 2

0
@player = Player.order("created_at").last
@player.players_items.each do |item|
  puts "#{item.player}: #{item.description} cost:#{item.cost}"
end

スルーが多いのは少し変です。これは、他の2つのモデル間の関係を(理想的には)説明する名前のモデルと考えてください。したがって、機器がプレーヤーに配布されている場合は、参加モデルの配布またはローンなどと呼ぶことができます。player_itemsは、直接アドレス指定されない結合テーブルの命名規則です。お役に立てば幸いです。

于 2010-07-13T22:46:37.443 に答える
0

コントローラで使用

@player = Player.find(params[:id], :include => [:items,:players_items])

そして、ビューで

@player.players_items.each do |player| 
puts "#{player.name}: #{player.player.item.description} cost:#{player.item.cost}"
end
于 2010-10-22T00:16:43.783 に答える