【问题标题】:Rails, displaying model's name in view instead of idRails,在视图中显示模型的名称而不是 id
【发布时间】:2012-10-21 10:26:49
【问题描述】:

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

我有如下关系:

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

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

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

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

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

#<User:0x007fe1b81c20b8> 

谁能解释一下为什么这样显示一个字段以及如何在我的视图中输出用户名。

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

@challenges = Challenge.all

【问题讨论】:

  • 只是指出。 “它返回以下输出:”之后没有输出。

标签: ruby-on-rails view associations


【解决方案1】:

我猜它一定是在显示对象本身。 challenge.creator 是对象而不是创建者的名字。

替换

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

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

【讨论】:

  • 当我这样做时,输出是: undefined method `name' for nil:NilClass
  • 我想我需要更改一些内容以使名称易于访问?
  • 您尚未设置挑战对象的创建者 (challenge.creator = user_obj1)。所以,这个挑战的创建者是 nil 并且 nil 对象没有 name 方法。 。试试这个代码。如果创建者存在,它将 o/p 创建者的名称。否则,它不会在不崩溃的情况下运行任何操作。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多