我非常擅长使用rails并将我的第一个应用程序放在一起。请耐心等待我!
我正在创建一个应用程序,让用户评价他们正在播放的视频游戏。在网站上我创建了一个页面,用户可以看到他/她过去评价过的所有游戏的列表。
我遇到了一些问题,我觉得这很简单,但这让我发疯了。
在控制器中我有:
def index
@rate = Rate.where(:rater_id => current_user.id)
@ratename = Game.where(:id => @rate.first.rateable_id)
end
在我看来,我有:
<% @rates.order("created_at desc").each do |rates| %>
You are playing <%= @ratename.name %></div>
<% end %>
我感到困惑的是,在浏览器中会显示:“你正在玩游戏”
如何让它显示游戏名称而不仅仅是“游戏”?
UPATE:
费率模型:
class Rate < ActiveRecord::Base
attr_accessible :rateable_id, :rater_id
belongs_to :user
belongs_to :game
end
答案 0 :(得分:2)
@ratename = Game.where(:id => @rate.first.rateable_id)
表示您发现具有所有属性的游戏,而不仅仅是名称。
正确的方式:
控制器中的:
@rates = current_user.rates.order("created_at desc") #will work if you made correct associations (user has many rates)
在视图中:
<% @rates each do |rate| %>
You are playing <%= rate.game.name %></div>
<% end %>
如果你做出了正确的关联,那么rate.game.name就会有效:游戏有很多费率,费率属于游戏。
答案 1 :(得分:1)
尝试直接参考协会。
<强>控制器:强>
def index
@rates = current_user.rates.order("created_at desc")
end
查看:强>
<% @rates.each do |rate| %>
You are playing <%= rate.game.name %>
<% end %>
答案 2 :(得分:1)
我的建议只是这样做
索引中的
def index
@rates = current_user.rates.includes(:game).order("created_at desc")
end
in view
<% @rates.each do |rate| %>
You are playing <%= rate.game.name %></div>
<% end %>
这将解决您的问题加上它将提高您的服务器效率