Проверка направляющих и 'fieldWithErrors', переносящий избранные теги

for i in range(len(temp_list)):
    list_to_assign[i][0] = temp_list[i]
6
задан Misha Moroshko 11 March 2011 в 01:14
поделиться

4 ответа

Поскольку я не мог выяснить, почему теги select не были включены в этот Proc, я создал вспомогательный метод который делает почти то же самое.

def field_with_error(object, method, &block)
  if block_given?
    if error_message_on(object, method).empty?
      concat capture(&block)
    else
      concat '<span class="fieldWithErrors">' + capture(&block) + '</span>'
    end
  end
end

Я использую это в своих взглядах следующим образом:

<% field_with_error @some_object, :assoc do %>
  <%= f.select(:assoc_id, @associations.collect {|assoc| [ asoc.name, assoc.id ] }) %>
<% end %>

Если кто-нибудь знает лучший или более чистый способ сделать это, я открыт для предложений.

3
ответ дан 10 December 2019 в 00:44
поделиться

Я нашел этот пост в блоге, который, кажется, решает эту проблему:

http://blog.invalidobject.com/ 2007/09/16 / rails-error-wrapping-for-select-input-fields-of-refereced-models

Надеюсь, что это полезно!

2
ответ дан 10 December 2019 в 00:44
поделиться

Другой способ, можно вставить на уровне метода или контроллера, или в the environment.rb:

ActionView :: Base.field_error_proc = proc {| input, instance | input}

0
ответ дан 10 December 2019 в 00:44
поделиться

Проблема (по крайней мере для меня) заключалась в том, что мой f.select: any_id искал в объекте object.errors ключ : something_id , когда моя проверка действительно была на : something , а не : any_id .

Я решил эту досадную проблему, изменив

object.errors.on(@method_name)

на

object.errors.on(@method_name) || object.errors.on(@method_name.gsub(/_id$/, ''))

] Вот отличия (от Rails 2.3.4):

diff --git a/vendor/rails/actionpack/lib/action_view/helpers/active_record_helper.rb b/vendor/rails/actionpack/lib/action_view/helpers/active_record_helper.rb
index 541899e..5d5b27e 100644
--- a/vendor/rails/actionpack/lib/action_view/helpers/active_record_helper.rb
+++ b/vendor/rails/actionpack/lib/action_view/helpers/active_record_helper.rb
@@ -247,7 +247,7 @@ module ActionView
       alias_method :tag_without_error_wrapping, :tag
       def tag(name, options)
         if object.respond_to?(:errors) && object.errors.respond_to?(:on)
-          error_wrapping(tag_without_error_wrapping(name, options), object.errors.on(@method_name))
+          error_wrapping(tag_without_error_wrapping(name, options), object.errors.on(@method_name) || object.errors.on(@method_name.gsub(/_id$/, '')))
         else
           tag_without_error_wrapping(name, options)
         end
@@ -256,7 +256,7 @@ module ActionView
       alias_method :content_tag_without_error_wrapping, :content_tag
       def content_tag(name, value, options)
         if object.respond_to?(:errors) && object.errors.respond_to?(:on)
-          error_wrapping(content_tag_without_error_wrapping(name, value, options), object.errors.on(@method_name))
+          error_wrapping(content_tag_without_error_wrapping(name, value, options), object.errors.on(@method_name) || object.errors.on(@method_name.gsub(/_id$/, '')))
         else
           content_tag_without_error_wrapping(name, value, options)
         end
4
ответ дан 10 December 2019 в 00:44
поделиться
Другие вопросы по тегам:

Похожие вопросы: