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

Posted

技术标签:

【中文标题】Rails,在视图中显示模型的名称而不是 id【英文标题】:Rails, displaying model's name in view instead of 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

【问题讨论】:

只是指出。 “它返回以下输出:”之后没有输出。 【参考方案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 创建者的名称。否则,它不会在不崩溃的情况下运行任何操作。

以上是关于Rails,在视图中显示模型的名称而不是 id的主要内容,如果未能解决你的问题,请参考以下文章

Rails 视图:加入 has_many 关系而不是遍历它们?

Rails 视图在双花括号中显示格式输入,例如 parameter,而不是实际值

Ruby on Rails 变量在视图中显示 Active Record 数据而不是整数

Rails:在嵌套视图中订购商品

如何让模型验证与 Rails 中的视图层对话以提供简单的功能?

CSV上传显示故障Rails 6