设置实例变量参数值

时间:2015-02-17 18:36:37

标签: ruby-on-rails params

我正在学习铁轨并且碰到了碰撞。

我有一个包含以下内容的视图:

<span><%= @goals.cost_per_conversion %></span>

(仅作为示例,而@goals实际上包含更多只是cost_per_conversion)

在某些情况下,视图不会包含实例变量@goals。我想在这种情况下防范案件。

在我的控制器中,我有以下代码:

if Goal.exists?(params[:id])
   @goals = Goal.find(params[:id])
else
   @goals.cost_per_conversion = 'N/A'
end

当然,这会返回错误,因为.conversions不是方法。

如何设置转化参数,以便在没有@goals变量可用时,我的视图仍然有效。

3 个答案:

答案 0 :(得分:3)

使用#try

<span><%= @goals.try(:cost_per_conversion) %></span>

更改控制器代码:

@goals = Goal.find(params[:id])

控制器中的双重检查记录很昂贵。顺便说一句,因为它是单个记录,你可以将其命名为@goal而不是@goals

答案 1 :(得分:1)

您可以使用if

<% if @goals %>
    <span><%= @goals.cost_per_conversion %></span>
<% end %>

并将控制器代码更改为:

if Goal.exists?(params[:id])
   @goals = Goal.find(params[:id])
end

if params[:id]
   @goals = Goal.find(params[:id])
end

答案 2 :(得分:0)

如果在数据库中找不到目标,您可以考虑使用@goals = Goal.new创建新的Goal对象。或者你可以在null object pattern之后创建一个像目标一样的空对象。

这只是接近它的两种方式,并不一定比其他答案更好。

顺便说一下,由于您的实例变量只包含一个目标而不是目标集合,因此应将其命名为@goal