2013-01-11 15 views
0

我是新手。我只是想在控制器中爲下面的代碼創建一個方法,以避免在視圖中再次重複。我怎樣才能以簡潔優雅的方式在紅寶石軌道上書寫?如何在控制器中創建一個IF條件的方法來在rails上的ruby視圖中調用?

<% @A = ....... %> 
<% @B = ....... %> 
<% @C = ....... %> 
<% @D = ....... %> 
<% @E = ....... %> 

<% if (@A || @B || @C) %> 
    <label> One: </label> 
    <%= ... %> 

    <label> Two: </label> 
    <%= ... %> 
<% end %> 

<% if (@A || @B || @C || (@D && @E)) %> 
    <label> Three: </label> 
    <%= ... %> 
<% end %> 
+0

所以你已經在你的視圖和你的控制器中有這個邏輯? 如果你只在你的視圖中有這個,爲什麼你使用類變量('@ A'而不是'a')? – yas4891

+0

我只有這些在我看來。不在我的控制器中。但我的任務是在控制器中爲此創建一個方法並在VIEW中縮短代碼。 – Vinay

+1

如果你只是在視圖中使用這個邏輯,我會建議你把它放在**助手**中,而不是在控制器中。 – yas4891

回答

2

假設你的模式被稱爲User你提供被放置在「應用程序/視圖/用戶/ show.html.erb」

我建議如下重構代碼:
(您需要用適當的邏輯替換A,B,C,D and E並將方法重命名爲更有意義的內容)

# in "app/helpers/users_helper.rb" 
module UsersHelper 
    def isABC 
    return A || B || C 
    end 

    def isDandE 
    return D && E 
    end 
end 

# in "app/views/users/show.html.erb 
<% if (isABC) %> 
    <label> One: </label> 
    <%= ... %> 

    <label> Two: </label> 
    <%= ... %> 
<% end %> 

<% if (isABC || isDandE) %> 
    <label> Three: </label> 
    <%= ... %> 
<% end %> 

您可以在這裏Rails的助手讀了起來:http://paulsturgess.co.uk/articles/49-using-helper-methods-in-ruby-on-rails

基本上是一個控制器的reponsibility就是接受傳入的Web請求,獲取neccessary數據(Model)並調用相應的View進行渲染。

Rails有Helpers可以從Views調用。這個習慣用法是,你把在視圖中使用的任何高級邏輯納入Helper

+0

如果我沒有USERS模型...是否有可能通過控制器而不是模型創建助手文件? – Vinay

+0

你沒有給你的控制器/模型/視圖命名,所以我只是假設'User'。用任何適合你的需求的替換它 – yas4891

+0

我剛剛有epc_admins_controller.rb。我沒有這個模型,所有變量都與其他一些模型有關聯。當我像你說的那樣做時,我得到了關聯失敗..... – Vinay

相關問題