我正在使用gems: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)检查无法到达。
如何制作第二个数据验证器来检查第一组属性的验证是否未通过?
提前致谢
答案 0 :(得分:5)
validate :titles_validation
def titles_validation
errors.add(:base, "your message") if [title_ru, title_en].all? { |value| value.blank? }
end
答案 1 :(得分:3)
问题是globalize3正在验证当前所在语言环境的标题。如果要验证每个语言环境(而不仅仅是当前语言环境),则必须在每个语言环境中为属性显式添加验证器(如指向@apneadiving)
您应该可以通过I18n.available_locales
:
class Post < ActiveRecord::Base
I18n.available_locales.each do |locale|
validates :"title_#{locale}", :presence => true
end
...
end