我正在通过尝试模拟可收集的纸牌游戏来学习rails.
我有一个冠军模型和稀有模型.我在模型定义中有has_many/belongs_to,这在控制台中有效:
c = Champion.find(1)
c.rarity.name
=> "Uncommon"
Run Code Online (Sandbox Code Playgroud)
当我在模板中做同样的事情时,我明白了
<%= champion.rarity.name %>
undefined method `name' for nil:NilClass
Run Code Online (Sandbox Code Playgroud)
有关如何使其工作的任何想法?
这是在Rails 3.2.2上.
<% @champions.each do |champion| %>
<tr>
<td><%= champion.name %></td>
<td><%= champion.rarity.name %></td>
</tr>
<% end %>
Run Code Online (Sandbox Code Playgroud)
如果每个Champion都没有Rarity关联(有些是关联nil),则可以使用a .try()来打印名称.否则, 当遇到没有a时,.each将失败.NoMethodRarity
<% @champions.each do |champion| %>
<tr>
<td><%= h champion.name %></td>
<td><%= h champion.rarity.try(:name) %></td>
</tr>
<% end %>
Run Code Online (Sandbox Code Playgroud)
或者不那么聪明的unless nil方法:
<% @champions.each do |champion| %>
<tr>
<td><%= h champion.name %></td>
<td><%= h champion.rarity.name unless champion.rarity.nil? %></td>
</tr>
<% end %>
Run Code Online (Sandbox Code Playgroud)
注意:我还添加了h()帮助方法来对HTML输出进行编码,尽管这是在Rails 3中自动完成的.
| 归档时间: |
|
| 查看次数: |
811 次 |
| 最近记录: |