2015-05-07 56 views
3

我發現我在使用ERB視圖顯示用戶信息時使用了大量的重複代碼。沿優雅的方式來顯示記錄,如果他們存在軌道ERB

<% if @user.name.present? %> 
    <%= @user.name %> 
<% end %> 

線基本上,我在我看來,這樣做的一切,以避免錯誤(誰可能沒有所有的新領域如老年用戶)。

有沒有更好的方法來做到這一點?

+0

如果@ user.name.present可以內聯測試'<%= @ user.name? %>'IIRC – Tensibai

+1

'<%= @ user.try:name%>' – Pavling

回答

7

移動邏輯到一個幫手:

def name_for(user) 
user.name if user.name.present? 
end 

並調用你的觀點,即幫手:

<%= name_for(@user) %> 
+0

正是我在尋找的東西,感謝您指引我朝着正確的方向 –

1

注意,呼籲用戶@user.name不具有名稱不會產生一個錯誤。如果@user.namenil,則只有當您嘗試調用nil時,纔會發生錯誤。 @user.name.upcase

因此,如果您的條件沒有包含視圖的任何其他部分,並且您很高興在用戶沒有名稱的情況下留出空白區域,則只需使用@user.name而不需要if檢查。

如果您有更復雜的示例,您還可以查看使用try。例如,如果用戶屬於一個組,但是一些老用戶不必,你可以用顯示組名組:

@user.group.try(:name) 

trynil只是安全返回nil沒有一個錯誤。

0

你也可以去這一個:

<%= @user.name if @user.name.present? %> 

但是,如果你重複完全相同的東西,最好的辦法是建立在你的助手爲Florent pointed out一個DEF。

相關問題