我的一个Rails视图中有以下内容:
<% if response.response_variables.where(var_name: variable[0]).present? %>
<%= response.response_variables.where(var_name: variable[0]).first.var_value %>
<% else %>
Something else
<% end %>
现在我正在加倍数据库调用if / else。有没有办法从if
语句中使用数据库调用,这样我就不会再调用数据库两次了?
答案 0 :(得分:2)
尝试
<% if variable = response.response_variables.where(var_name: variable[0]).first %>
<%= variable.var_value %>
<% else %>
Something else
<% end %>
注意:
你可能应该将这个逻辑移到你的控制器中。
答案 1 :(得分:2)
首先,最好在视图中保持逻辑最小化,以便尝试重构代码,以便在视图中尽可能少地暴露逻辑。
无论如何,这是你如何避免不必要的数据库调用:
<% response_variable = response.response_variables.find_by(var_name: variable[0]).includes(:var_value) %>
<% if response_variable %>
<%= response_variable.var_value %>
<% else %>
Something else
<% end %>
在上面的代码中,我们假设var_value
是response_variable的属性。如果它不是属性,您可以删除对includes
。
希望有所帮助!