设置实例变量参数值

Set instance variable param value

我正在学习 rails 并且 运行 遇到了问题。

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

<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

这 returns 自然是一个错误,因为 .conversions 不是方法。

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

使用#try

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

并更改控制器代码:

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

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

你可以使用 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

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

之后创建一个像目标一样的空对象

这些只是解决问题的两种方法,不一定比其他答案更好。

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