0

有两个模型:names 和:rat1。每个名字在 rat1 中可能有也可能没有评级。我希望能够显示我所有存在的评级,而只为那些不存在的评级添加 N/A。

路线.rb

resources :names do
  resource :rat1
end

名字.rb

has_one :rat1

大鼠1.rb

belongs_to :names

我目前正在尝试将 html 表转换为可以导出到 javascript 表的 xml 块。我想做与此类似的事情。

<%= @name.rat1.rating || 'N/A' %>

但是当我尝试

xml.tag!("cell", @name.rat1.rating || 'N/A')

它不起作用。如果它是 nil,它会抛出一个 nil 类错误并失败。

4

2 回答 2

1

你可以试试这个,也许评估出错是因为你缺少括号:

 xml.tag!("cell", (@name.rat1.rating || 'N/A'))

编辑:

您可以执行以下操作:

xml.tag!(cell, (@name.rat1.rating.present? then @name.rat1.rating else "N/A" end ))

为您节省几行代码。

<%= if @name.rat1.rating.present? then @name.rat1.rating else "N/A" end %>

首先它检查@name.rat1.rating 是否存在,如果存在则呈现@name.rat1.rating。它不能为零,因为你已经检查到现在?方法。如果 @name.rat1.rating 不存在,它将遵循 else 条件并返回“N/A”。

于 2013-02-06T16:00:08.660 回答
0

所以我的解决方案最终如下。我在 names_helper.rb 中创建了一个辅助方法

def show_rating(rating)
  if rating.present?
     rating.rating
  else
     "N/A"
  end
end

我在 xml 中提供它的方式是

xml.tag!("cell", show_rating(name.rat1))

这样,我在尝试拉取 .rating 值之前检查 rat1 模型的存在。

谢谢你的帮助!

于 2013-02-06T18:14:47.487 回答