Rails - 如何在html.erb模板中访问外键对象?在控制台中工作

时间:2012-04-12 23:53:38

标签: ruby-on-rails

我正在通过尝试模拟可收集的纸牌游戏来学习rails。

我有一个冠军模型和稀有模型。我在模型定义中有has_many / belongs_to,这在控制台中有效:

c = Champion.find(1)

c.rarity.name
=> "Uncommon"

当我在模板中做同样的事情时,我得到了

<%= champion.rarity.name %>

undefined method `name' for nil:NilClass

有关如何使其发挥作用的任何想法?

这是在Rails 3.2.2上。

更新:完整的.erb代码

<% @champions.each do |champion| %> 
  <tr> 
    <td><%= champion.name %></td>
    <td><%= champion.rarity.name %></td> 
  </tr>
<% end %>

1 个答案:

答案 0 :(得分:6)

如果每个Champion没有Rarity关联(有些是nil),您可以使用.try()打印该名称。否则,.each将在遇到NoMethod的{​​{1}}时失败并显示Rarity

<% @champions.each do |champion| %> 
  <tr> 
    <td><%= h champion.name %></td>
    <td><%= h champion.rarity.try(:name) %></td> 
  </tr>
<% end %>

或者不那么聪明的unless nil方法:

<% @champions.each do |champion| %> 
  <tr> 
    <td><%= h champion.name %></td>
    <td><%= h champion.rarity.name unless champion.rarity.nil? %></td> 
  </tr>
<% end %> 

注意:我还添加了h()辅助方法来对HTML输出进行编码,尽管这是在Rails 3中自动完成的。