我有以下简单的表格:
<% form_for(@weight) do |f| %>
<%= f.error_messages %>
<%= f.label :weight %>:
<%= f.text_field :weight, :size => 5 %> kg.
<%= f.submit "Add weight" %>
<%= f.error_message_on :weight %>
<% end %>
它只显示一个字段的形式:权重。
通常呈现如下:
<form action="/weights" class="new_weight" id="new_weight" method="post">
<div style="margin:0;padding:0;display:inline"><input name="authenticity_token" type="hidden" value="jYoVJkDnv4a1DMGnelJpGPElbH0XWKPNlESTt9GvzdA=" /></div>
<label for="weight_weight">Weight</label>:
<input id="weight_weight" name="weight[weight]" size="5" type="text" /> kg.
<input id="weight_submit" name="commit" type="submit" value="Add weight" />
</form>
这很好。当我在不设置任何权重的情况下提交此表单时,会得到一个验证错误。f.error_messages和f.error_messages_on:weight正确显示错误消息,但是标签和文本字段没有像我通常在rails表单中预期的那样被类fieldwithorr包围在一个div中。我得到了这个:
<form action="/weights" class="new_weight" id="new_weight" method="post">
<div style="margin:0;padding:0;display:inline"><input name="authenticity_token" type="hidden" value="jYoVJkDnv4a1DMGnelJpGPElbH0XWKPNlESTt9GvzdA=" /></div>
<div class="errorExplanation" id="errorExplanation">
<h2>1 error prohibited this weight from being saved</h2>
<p>There were problems with the following fields:</p>
<ul><li>Weight can't be blank</li></ul>
</div>
<label for="weight_weight">Weight</label>:
<input id="weight_weight" name="weight[weight]" size="5" type="text" /> kg.
<input id="weight_submit" name="commit" type="submit" value="Add weight" />
<div class="formError">can't be blank</div>
</form>
作为参考,我应该得到的是:
<form action="/weights" class="new_weight" id="new_weight" method="post">
<div style="margin:0;padding:0;display:inline"><input name="authenticity_token" type="hidden" value="jYoVJkDnv4a1DMGnelJpGPElbH0XWKPNlESTt9GvzdA=" /></div>
<div class="errorExplanation" id="errorExplanation">
<h2>1 error prohibited this weight from being saved</h2>
<p>There were problems with the following fields:</p>
<ul><li>Weight can't be blank</li></ul>
</div>
<div class="fieldWithErrors"><label for="weight_weight">Weight</label></div>:
<div class="fieldWithErrors"><input id="weight_weight" name="weight[weight]" size="5" type="text" /></div> kg.
<input id="weight_submit" name="commit" type="submit" value="Add weight" />
<div class="formError">can't be blank</div>
</form>
你知道我为什么不买那些沙发吗?我安装了formtastic,它在其他形式中使用,但据我所知,它不应该干扰这个形式。
更新:只是为了确定,我打印了debug(@weight),它有错误:
--- &id002 !ruby/object:Weight
attributes:
created_at:
updated_at:
weight:
measured_on: &id001 !timestamp
at: "2009-11-22 01:30:13.522589 +01:00"
"@marshal_with_utc_coercion": false
user_id: 1
attributes_cache:
measured_on: *id001
changed_attributes:
measured_on:
user_id:
errors: !ruby/object:ActiveRecord::Errors
base: *id002
errors:
weight:
- !ruby/object:ActiveRecord::Error
attribute: :weight
base: *id002
message: :blank
options: {}
type: :blank
new_record: true
更新:模型是
class Weight < ActiveRecord::Base
belongs_to :user
validates_presence_of :weight, :measured_on
attr_accessible :weight, :measured_on
def after_initialize
self.measured_on ||= Time.now
end
结束