Rails:App显示表/模型名称而不是表中的数据

时间:2012-09-29 06:44:35

标签: ruby-on-rails ruby ruby-on-rails-3 activerecord

我非常擅长使用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

3 个答案:

答案 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 %>

这将解决您的问题加上它将提高您的服务器效率