rails 3 xml builder exclude nil



有两个模型:name和:rat1。每个名字的评级可能是rat1,也可能不是rat1。我希望能够显示我所有存在的评分,而只为不存在的评分打N/A。

routes.rb

resources :names do
  resource :rat1
end

names.rb

has_one :rat1

rat1.rb

belongs_to :names

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

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

但当我尝试时

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

它不起作用。如果为nil,则抛出nil类错误并失败。

您可以尝试一下,也许评估出错是因为您缺少括号:

 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.rat。它不能为零,因为你已经通过现在检查了吗?方法如果@name.rat1.rating不存在,它将遵循else条件并返回"N/A"。

所以我的解决方案如下。我在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))

通过这种方式,我在尝试提取.grating值之前检查rat1模型的存在。

谢谢你的帮助!

最新更新