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>
任何想法,为什么没有被显示的错误时,一个无效的“治疗'正在提交?谢谢!
的错误信息页面被称为“_error_messages.html.erb”。我认为下划线前缀使得这是部分的定义,但也许我错了,因为在编辑设置页面(上面的代码块)中调用'shared/error_messages'工作得很好,但不需要提及'partial '如你所说 – keypulsations 2012-08-07 15:11:14
它确实使其成为部分的定义。但是,使用render调用partial时,rails会让您ommit = render:partial =>,并且只有在您使用OUT选项调用时才写入simple = render。由于您使用option object:f.object调用,所以您必须写出部分:。 – 2012-08-07 16:52:46
好的,我明白了。然而,这对于“编辑用户”页面来说工作得很好:<%= render'shared/error_messages',object:f.object%> [尽管我传递的是对象:f.object选项,并省略:局部] – keypulsations 2012-08-07 17:52:01