如何通过多次获取其他属性

时间:2010-07-13 22:14:04

标签: ruby-on-rails ruby-on-rails-3 has-many-through

我正在使用Rails 3 beta 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

在players_controller中

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时,我只能访问与项目模型关联的属性,而不能访问与PlayersItem模型关联的任何属性。

我试图在相同的“调用”中访问项目模型和players_items模型中的属性,类似于SQL Join语句,如下所示

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

这可能吗?

2 个答案:

答案 0 :(得分:0)

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

有很多通过有点奇怪。可以将其视为一个模型,其名称应该(理想情况下)描述其他两个模型之间的关系。因此,如果将设备分发给玩家,您可以调用连接模型分发或贷款等。 players_items是连接表的命名约定,不会直接解决。 我希望有所帮助!

答案 1 :(得分: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