2012-08-07 60 views
0

我不明白爲什麼我的'共享/ error_messages'部分不應該呈現時,它應該是(即當通過此表單提交一個無效的「治療」 ):'shared/error_messages'部分不呈現時應該

_treating_form.html.erb:

<%= form_for(@treating) do |f| %> 
    <%= render 'shared/error_messages', object: f.object %> 
    <div><%= f.hidden_field :requestee_id %></div> 
    <div> 
     <%= f.text_field :proposed_location, placeholder: "Propose a location here..." %> 
    </div>  
    <div> 
     <%= f.text_field :proposed_date, placeholder: "Propose a date here..." %> 
    </div> 
    <div class="field"> 
     <%= f.text_area :intro, placeholder: "Write your introduction here..." %> 
    </div> 
    <%= f.submit "Send", class: "btn btn-large btn-primary" %> 
<% end %> 

這_treating_form.html.erb部分被稱爲在用戶/ show.html.erb視圖:

<% provide(:title, @user.name) %> 
<div class="row"> 
    <aside class="span4"> 
     <section> 
      <h1> 
       <%= @user.name %> 
      </h1> 
     </section> 
     <% if signed_in? %> 
      <section> 
        <%= render 'shared/treating_form' unless current_user?(@user) %> 
      </section> 
     <% end %> 
    </aside> 
</div> 

這是我的error_messages部分:

<% 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 %> 

的error_messages部分被正確地被在後提交給用戶「修改設置」頁面觸發驗證錯誤渲染:

<% provide(:title, "Edit user") %> 
<h1>Update your profile</h1> 
<div class="row"> 
    <div class="span6 offset3"> 
    <%= form_for(@user) do |f| %> 
     <%= render 'shared/error_messages', object: f.object %> 
     <%= f.label :name %> 
     <%= f.text_field :name %> 
     <%= f.label :email %> 
     <%= f.text_field :email %> 
     <%= f.label :password %> 
     <%= f.password_field :password %> 
     <%= f.label :password_confirmation, "Confirm Password" %> 
     <%= f.password_field :password_confirmation %> 
     <%= f.submit "Save changes", class: "btn btn-large btn-primary" %> 
     <% end %>  
    </div> 
</div> 

任何想法,爲什麼沒有被顯示的錯誤時,一個無效的「治療'正在提交?謝謝!

回答

1

無論何時添加任何選項的部分,你需要明確指定:部分=>

= render partial: 'shared/error_messages', object: f.object 
+0

的錯誤信息頁面被稱爲「_error_messages.html.erb」。我認爲下劃線前綴使得這是部分的定義,但也許我錯了,因爲在編輯設置頁面(上面的代碼塊)中調用'shared/error_messages'工作得很好,但不需要提及'partial '如你所說 – keypulsations 2012-08-07 15:11:14

+0

它確實使其成爲部分的定義。但是,使用render調用partial時,rails會讓您ommit = render:partial =>,並且只有在您使用OUT選項調用時才寫入simple = render。由於您使用option object:f.object調用,所以您必須寫出部分:。 – 2012-08-07 16:52:46

+0

好的,我明白了。然而,這對於「編輯用戶」頁面來說工作得很好:<%= render'shared/error_messages',object:f.object%> [儘管我傳遞的是對象:f.object選項,並省略:局部] – keypulsations 2012-08-07 17:52:01