防止在视图中重复数据库调用

时间:2014-01-10 15:04:39

标签: ruby-on-rails ruby-on-rails-4

我的一个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语句中使用数据库调用,这样我就不会再调用数据库两次了?

2 个答案:

答案 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

的调用

希望有所帮助!