2013-10-23 65 views
1

我正在從Michael Hartl的書中的示例應用程序構建Rails應用程序。爲了在用戶註冊顯示錯誤消息,我使用的部分在共享目錄 - 應用程序/視圖/共享/ _error_messages.html.erb:Rails中的控制結構部分

<%if @fact %> 
    <% @data = @fact %> 
<% elsif @user %> 
    <% @data = @user %> 
<% end %> 

<% if @data.errors.any? %> 
    <div id="error_explanation"> 
    <div class="alert alert-error"> 
     The form contains <%= pluralize(@data.errors.count, "error") %>. 
    </div> 
    <ul> 
    <% @data.errors.full_messages.each do |msg| %> 
     <li>* <%= msg %></li> 
    <% end %> 
    </ul> 
    </div> 
<% end %> 

原來,這部分剛開始是這樣的:

<% if @user.errors.any? %> 

但是,因爲我已經決定重新使用這部分顯示在其他頁面上的錯誤,我在使用,這取決於頁我用不同的對象(@user,@fact)它在。這很容易通過添加頂部的IF語句來解決,即

<%if @fact %> 
    <% @data = @fact %> 
<% elsif @user %> 
    <% @data = @user %> 
<% end %> 

- 但這感覺很癢。是否有一個控制器應該將這種邏輯用於共享偏分量?

回答

3

你可以通過局部變量部分代替:

<% if object.errors.any? %> 
    <div id="error_explanation"> 
    <div class="alert alert-error"> 
     The form contains <%= pluralize(object.errors.count, "error") %>. 
    </div> 
    <ul> 
    <% object.errors.full_messages.each do |msg| %> 
     <li>* <%= msg %></li> 
    <% end %> 
    </ul> 
    </div> 
<% end %> 

而在你的模板,例如:

<%= render 'shared/error_messages', object: @user %> 
+0

不錯!奇蹟般有效。謝謝Marek! –

-1

你可以使用呈現從你的控制器指向部分爲用戶和事實。檢查出API documentation on rendering partials

+0

雖然這個鏈接可能回答這個問題,但最好在這裏包含答案的重要部分,並提供供參考的鏈接。如果鏈接頁面更改,則僅鏈接答案可能會失效。 – jbr

+0

好的,謝謝你的提示... – mecharaptors

0

馬立克的答案可能是最好的。但是,這是一個可擴展的替代方案,與您所做的更接近。

只需更換:

<%if @fact %> 
    <% @data = @fact %> 
<% elsif @user %> 
    <% @data = @user %> 
<% end %> 

有:

<% @data = @fact||@user %>