我的表格看起来像这样 -
<%= 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非常陌生,但这对我来说似乎很奇怪。
为什么我的信息在它的容器之外?
感谢。
答案 0 :(得分:1)
这不应该有一个等号(你喜欢我的双重否定)吗?
<%= @photo.errors[:photo].each do |attr,msg| %>
/ \
|
|
换句话说,它应该是:
<% @photo.errors[:photo].each do |attr,msg| %>
我已经做了大约一百次这个错字,并且终于摆脱了这样做的习惯。我敢打赌这是问题的一部分。
您的form_for
需要和等号,因为它会在您的视图中输出HTML。循环本身不,因为它只是一个循环。