2009-11-22 3 views
0

У меня есть следующий простой вид:Где находился div class = fieldWithError?

<% 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: вес правильно отображает сообщения об ошибках, но метка и текстовое поле не окружены в div с классом fieldWithError, как я обычно ожидаю в формах в Rails. Вместо этого я получаю это:

<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, и он используется в других формах, но насколько я знаю, это не должно мешать этой форме.

Update: просто чтобы быть уверенным, я распечатал отладки (@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 

Update: модель

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 

конец

+0

Примечание: я удалил formtastic и начал работать правильно. – Pablo

ответ

1

Это ошибка в Formtastic. Это было исправлено, но кажется, что в данный момент не выпущена версия Formtastic.

свой отчет об ошибке на http://github.com/justinfrench/formtastic/issues/closed/#issue/132

Исправление можно увидеть на http://github.com/grimen/formtastic/commit/2b81d9af385dadf8b37dc14f387afe3d43e4958a

В конечном счете проблема с использованием justinfrench-formtastic из GitHub, который устарел и оставил вместо formtastic от Gemcutter.

0

Вы может потребоваться заключить ваше поле метки & в тег блока, например p или div.

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

Этот способ рельсы имеет место проскочить ошибку обратно в противном случае он возвращается к форме, как это делает сейчас.

+0

Вероятно, не обязательно должен быть «блочным» тегом, который должен делать любой корпус. – nowk

+0

Это не помогло. Фактически рельсы помещают метку внутри одного div и текстовое поле внутри другого div. Я не думаю, что рельсы могут изменять HTML-код, например p, что он уже написан в представлении; он может генерировать только больше кода. – Pablo

+0

Приносим извинения, я должен был прочитать ваш пост немного ближе. Мой разум думал о чем-то другом. Но, похоже, вы поняли это. Я не знаком с этим плагином или тем, что вы можете настроить, чтобы вернуть их, но вы можете посмотреть в ActionView :: Base.field_error_proc, если вы хотите самостоятельно выполнить собственную работу. – nowk

Смежные вопросы