1

我对 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 %>

我感到困惑的是,在浏览器中显示的是:“你正在玩游戏”

如何让它显示游戏名称而不仅仅是“游戏”?

更新:

费率模型:

class Rate < ActiveRecord::Base
  attr_accessible :rateable_id, :rater_id

  belongs_to :user
  belongs_to :game

end
4

3 回答 3

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 将起作用:游戏有很多速率,速率属于游戏。

于 2012-09-29T07:29:20.787 回答
1

尝试直接引用关联。

控制器:

def index
  @rates = current_user.rates.order("created_at desc")
end

看法:

<% @rates.each do |rate| %>
  You are playing <%= rate.game.name %>
<% end %>
于 2012-09-29T06:54:08.167 回答
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 %>

这将解决您的问题,并且会提高您的服务器效率

于 2012-09-29T09:56:07.947 回答