rails 3 xml builder排除零

时间:2013-02-06 15:16:10

标签: ruby-on-rails-3

有两种型号:名称和:rat1。每个名称在rat1中可能具有或不具有评级。我希望能够显示我现有的所有评分,并为那些不存在的评分提供N / A.

的routes.rb

resources :names do
  resource :rat1
end

names.rb

has_one :rat1

rat1.rb

belongs_to :names

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

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

但是当我尝试

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

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

2 个答案:

答案 0 :(得分: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”。

答案 1 :(得分: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模型的当前状态。

感谢您的帮助!