代码之家  ›  专栏  ›  技术社区  ›  Pablo Fernandez

DIV class=FieldWitherRor去哪儿了?

  •  0
  • Pablo Fernandez  · 技术社区  · 15 年前

    我有以下简单的表格:

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

    结束

    2 回复  |  直到 15 年前
        1
  •  1
  •   Pablo Fernandez    15 年前

    这是formtastic的一个错误。它被修复了,但目前似乎没有发布版本的formtastic有修复。

    我自己的bug报告打开了 http://github.com/justinfrench/formtastic/issues/closed/#issue/132

    修复可以在 http://github.com/grimen/formtastic/commit/2b81d9af385dadf8b37dc14f387afe3d43e4958a

    最终问题是使用Github的Justinfrench Formtastic,它已经过时并被废弃,而不是Gemcatter的Formtastic。

        2
  •  0
  •   nowk    15 年前

    您可能需要将标签和字段括在块标记中,如P或DIV。

    <p>
      <%= f.label :weight %>:
      <%= f.text_field :weight, :size => 5 %> kg.
    </p>
    

    这样,Rails就有了一个可以将错误滑回的地方,否则它就会像现在这样回到表单中。