我發現我在使用ERB視圖顯示用戶信息時使用了大量的重複代碼。沿優雅的方式來顯示記錄,如果他們存在軌道ERB
<% if @user.name.present? %>
<%= @user.name %>
<% end %>
線基本上,我在我看來,這樣做的一切,以避免錯誤(誰可能沒有所有的新領域如老年用戶)。
有沒有更好的方法來做到這一點?
我發現我在使用ERB視圖顯示用戶信息時使用了大量的重複代碼。沿優雅的方式來顯示記錄,如果他們存在軌道ERB
<% if @user.name.present? %>
<%= @user.name %>
<% end %>
線基本上,我在我看來,這樣做的一切,以避免錯誤(誰可能沒有所有的新領域如老年用戶)。
有沒有更好的方法來做到這一點?
移動邏輯到一個幫手:
def name_for(user)
user.name if user.name.present?
end
並調用你的觀點,即幫手:
<%= name_for(@user) %>
正是我在尋找的東西,感謝您指引我朝着正確的方向 –
注意,呼籲用戶@user.name
不具有名稱不會產生一個錯誤。如果@user.name
爲nil
,則只有當您嘗試調用nil
時,纔會發生錯誤。 @user.name.upcase
。
因此,如果您的條件沒有包含視圖的任何其他部分,並且您很高興在用戶沒有名稱的情況下留出空白區域,則只需使用@user.name
而不需要if
檢查。
如果您有更復雜的示例,您還可以查看使用try
。例如,如果用戶屬於一個組,但是一些老用戶不必,你可以用顯示組名組:
@user.group.try(:name)
try
上nil
只是安全返回nil
沒有一個錯誤。
你也可以去這一個:
<%= @user.name if @user.name.present? %>
但是,如果你重複完全相同的東西,最好的辦法是建立在你的助手爲Florent pointed out一個DEF。
如果@ user.name.present可以內聯測試'<%= @ user.name? %>'IIRC – Tensibai
'<%= @ user.try:name%>' – Pavling