设置实例变量参数值
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
。
我正在学习 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
。