Rails,在视图中显示模型的名称而不是id

时间:2012-10-21 10:26:49

标签: ruby-on-rails view associations

我真的很感激这方面的一些帮助。

我有以下关系:

class User < ActiveRecord::Base
  has_many :ideas, :class_name => 'Challenge', :foreign_key => 'creator_id'
  has_many :contributions, :class_name => 'Challenge', :foreign_key => 'contributor_id'

class Challenge < ActiveRecord::Base
  belongs_to :creator, :class_name => 'User'
  belongs_to :contributor, :class_name => 'User'

我的问题是能够在挑战模型的视图中显示名称而不是用户的ID。

在控制台中,我可以向@challenge分配挑战,然后输入

@challenge.creator.name

返回创建者的名字,完美。但是当我尝试将它放在我的视图中时,它会返回未定义的方法'name'。

我认为最接近我所做的正确事情的是让我的挑战索引视图的相关部分说创建者,而不是creator_id:

<tr><% @challenges.each do |challenge| %><tr>
<td><%= challenge.creator %></td>

但是它不是在我想要的视图中返回创建者名称,而是返回以下输出:

#<User:0x007fe1b81c20b8> 

有人可以解释为什么字段会像这样显示,以及如何在我的视图中输出用户名。

我的挑战控制器索引操作只是:

@challenges = Challenge.all

非常感谢你。

1 个答案:

答案 0 :(得分:1)

我猜它必须显示对象本身。 challenge.creator是对象,而不是创建者的名称。

替换

<td><%= challenge.creator %></td>

使用

<td><%= challenge.creator.try :name %></td>