我正在使用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"
这可能吗?
答案 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