1

我正在使用 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 模型关联的任何属性。

我试图在同一个“调用”中访问 items 模型和 player_items 模型中的属性,类似于 SQL Join Statement 这样

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

有很多通过有点奇怪。将其视为一个模型,其名称应该(理想情况下)描述其他两个模型之间的关系。因此,如果设备正在分发给玩家,您可以调用加入模型分发或贷款或其他方式。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 回答