не может изменить стиль текстовой области на field_with_error - PullRequest
0 голосов
/ 29 сентября 2011

Я имею дело с этой устаревшей формой для создания нового разговора.Он имеет два поля: Имя и описание (первый комментарий к разговору)

Вот поля: _fields.haml

.conversation_title= f.label :name, t('.name')
.clear
= f.text_field :name, :style => 'width: 230px'
= errors_for f.object, :name

if f.object.new_record?
  = f.fields_for :comments, f.object.comments.build do |comment_fields|
    .conversation_title= comment_fields.label :description, t('.description')
    = comment_fields.text_area :body, :placeholder => t("comments.new.conversation"),    :style => 'width: 545px'
    = errors_for f.object, :comments

из представления new для разговоров

= form_for [@current_project, @conversation], :html => { 'data-project-id' => @current_project.id, :name => 'form_new_conversation', :multipart => true } do |f| #, :onsubmit => 'return validate_form_new_conversation(form_new_conversation)'
  = render 'fields', :f => f, :project => @current_project
  = render 'watcher_fields', :f => f, :project => @current_project

Связанные проверки:

conversation.rb

validates_presence_of :name, :message => :no_title, :unless => :simple?
validates_presence_of :comments, :message => :must_have_one, :unless => :is_importing

comment.rb

validates_presence_of :body, :unless => lambda { |c| c.task_comment? or c.uploads.to_a.any? or c.google_docs.any? }

По какой-то причине proc связан с полямис ошибкой от base.rb

@@field_error_proc = Proc.new{ |html_tag, instance| "<div class=\"field_with_errors\">#{html_tag}</div>".html_safe }

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

Чего мне не хватает?Спасибо!

Ответы [ 2 ]

1 голос
/ 03 октября 2011

Мне не удалось заметить одну важную часть этой строки в вашем коде:

= f.fields_for :comments, f.object.comments.build do |comment_fields|

Вы звоните f.object.comments.build, что означает, что у вас всегда будет новый экземпляр Comment (вместоэкземпляр, который был проверен в контроллере).

Чтобы избежать этого, вы можете создать комментарий в контроллере.Если вы используете обычные успокаивающие действия, у вас, вероятно, есть два места, где вы хотите создать комментарий.Сначала в действии new, а во-вторых, в действии create.

def new
  @conversation = Conversation.new
  @conversation.comments.build # Create a blank comment so that the fields will be shown on the form
end

def create
  @conversation = Conversation.new(params[:conversation])
  respond_to do |format|
    if @conversation.save
      format.html { redirect_to conversations_path }
    else
      format.html {
        @conversation.comments.build if @conversation.comments.blank? # Create a blank comment only if none exists
        render :action => "new"
      }
    end
  end
end
1 голос
/ 29 сентября 2011

Проверка будет для модели Comment (а не модели Conversation) в поле body. Убедитесь, что проверка существует. Вы можете отладить это, чтобы убедиться, что comment_fields.object также имеет ошибку, установленную в поле body.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...