2014-01-10 35 views
0

在我的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

嘗試

<% if variable = response.response_variables.where(var_name: variable[0]).first %> 
    <%= variable.var_value %> 
<% else %> 
    Something else 
<% end %> 

注:

你或許應該這樣的邏輯進入你的控制器雖然。

+1

可能進入模型 – bbozo

+0

在控制檯中顯示以下警告:warning:found = in conditional,應該是== – Lucky

+0

是的,那些警告是屁股疼痛 - 這是標準的ruby做事的方式。您可以嘗試在括號包裹吧'如果(VAR =右值)',我通常不理會那些(注意對自己 - 尋求這些警告的來源,並摧毀它) – BroiSatse

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

希望有幫助!

相關問題