проверка globalize3 и easy_globalize3_accessors

Я использую драгоценные камни: globalize3 и easy_globalize3_accessors. У меня проблема с проверками. Например, у меня есть модель Post:

class Post
  translates :title, :content
  globalize_accessors :locales => [:en, :ru], :attributes => [:title, :content]
  validates :title, :content, :presence => true
end

и форма:

= form_for @post do |f|
  -I18n.available_locales.each do |locale|
    = f.text_field "title_#{locale}"
    = f.text_area "content_#{locale}"

как это выглядит в представлении (если I18n.locale = :ru):

<form action="/ru/posts" method="post">
  <input id="post_title_ru" name="post[title_ru]" type="text" />
  <textarea cols="40" id="post_content_ru" name="vision[content_ru]"></textarea>

  <input id="post_title_en" name="post[title_en]" type="text" />
  <textarea cols="40" id="post_content_en" name="vision[content_en]"></textarea>

  <input name="commit" type="submit" value="Создать Видение" />
</form>

Если я заполняю поля только на русском, то валидация проходит, если я хотел, чтобы пост был только на английском, и заполняю только английское поле (при I18n.locale=:ru), то валидация не проходит

Title can't be blank
Content can't be blank

Я так понимаю проблема в атрибутах, валидация проверяет только первые атрибуты :title_ru и :content_ru. А до остальных атрибутов (:content_en и :title_en) проверка не доходит.

как сделать второй валидатор данных для проверки не пройдена ли валидация первой группы атрибутов?

заранее спасибо


comment
как насчет validates :title_ru, :content, :presence => trueи validates :title_en, :content, :presence => true   -  person apneadiving    schedule 29.08.2012
comment
если я хочу опубликовать только :title_en и :content_en - проверка не удалась   -  person nilid    schedule 29.08.2012
comment
создайте собственный валидатор, проверяющий, установлен ли хотя бы один. Нужна помощь?   -  person apneadiving    schedule 29.08.2012
comment
Буду очень благодарен за помощь. Я пытался создать валидатор (и пытался с опцией :unless), но моих знаний, вероятно, недостаточно (   -  person nilid    schedule 29.08.2012
comment
если мой ответ подходит, не забудьте принять его, пожалуйста   -  person apneadiving    schedule 29.08.2012


Ответы (1)


Проблема в том, что globalize3 проверяет заголовок для какой бы локали вы ни находились. Если вы хотите проверить для каждой локали (а не только для текущей локали), вы должны явно добавить валидаторы для атрибута в каждой локали (как указал @apneadiving) .

Вы должны иметь возможность генерировать эти валидаторы автоматически, циклически перебирая I18n.available_locales:

class Post < ActiveRecord::Base
  I18n.available_locales.each do |locale|
    validates :"title_#{locale}", :presence => true
  end

  ...

end
person Chris Salzberg    schedule 29.08.2012
comment
для этого и делаются комментарии - person apneadiving; 29.08.2012