在包含div中不呈现错误消息

时间:2011-07-08 13:35:48

标签: ruby-on-rails ruby-on-rails-3

我的表格看起来像这样 -

<%= form_for @photo,:html=>{:multipart=>true} do |f| -%>
<div> 
       <%= f.file_field :photo %>
       <%= f.submit "Upload", :disable_with => 'Uploading...' %>
</div>
    <%= @photo.errors[:photo].each do |attr,msg| %>
         <span class="form-error"><%= msg %></span>
    <% end %>   
<% end -%>

我的模型有以下一行

  validates_presence_of :photo, :message => "Choose a file to upload"

由于某种原因,错误消息在包含span之外呈现。渲染的HTML看起来像这样 -

<form ..some attributes..><some hidden divs and inputs />
  <div class="field_with_errors"><input type="file" name="photo[photo]" id="photo_photo"></div>
  <input type="submit" value="Upload" name="commit" id="photo_submit" data-disable-with="Uploading...">
  <span class="form-error"></span>
  Choose a file to upload
</form>

我对rails非常陌生,但这对我来说似乎很奇怪。

为什么我的信息在它的容器之外?

感谢。

1 个答案:

答案 0 :(得分:1)

这不应该有一个等号(你喜欢我的双重否定)吗?

<%= @photo.errors[:photo].each do |attr,msg| %>
 / \
  |
  |

换句话说,它应该是:

<% @photo.errors[:photo].each do |attr,msg| %>

我已经做了大约一百次这个错字,并且终于摆脱了这样做的习惯。我敢打赌这是问题的一部分。

您的form_for需要和等号,因为它会在您的视图中输出HTML。循环本身,因为它只是一个循环。