我有一个双语网站,有两个区域设置: en 和 ru 。
我希望我的网站有i18n。我使用' globalize3 '和' easy_globalize3_accessors '宝石。
我可以使用标准表单创建和编辑部门。
区域设置来自网址:example.com/en/departments/
或example.com/ru/departments/
现在,如果我想创建一个新的部门项目,我会看到这样的事情:
我的问题是第4号。我无法使用复选框验证我的验证。
主要问题是:复选框有效吗?如果是,请显示另一个表单并运行验证。如果不是,则不显示任何内容并且不对该表单运行验证,将其传递为空。
现在,如果我填写两种形式,一切都像魅力一样。
确定。我尝试了什么。
模型
class Department < ActiveRecord::Base
attr_accessible :name, :translations_attributes
translates :name, fallbacks_for_empty_translations: true
accepts_nested_attributes_for :translations
# The inline class Translation is a hack to solve
# "Can't mass-assign protected attributes: locale"
# See https://github.com/svenfuchs/globalize3/issues/128#issuecomment-11480650
class Translation
attr_accessible :locale, :name
validates :name, uniqueness: true
validates :name, format: {with: /\A[-а-яА-Я -]+\Z/}, if: ->(l) {l.locale.to_s == 'ru'}
validates :name, format: {with: /\A[-a-zA-Z -']+\Z/}, if: ->(l) {l.locale.to_s == 'en'}
end
end
控制器
def new
@department = Department.new
end
def create
@department = Department.new(params[:department])
@department.save ? (redirect_to action: :index) : (render :new)
end
查看(new.haml.html)没有复选框
= form_for @department, url: {action: :create} do |f|
%h2
- f.globalize_fields_for_locale I18n.locale do |g|
= "Translation for"
= I18n.locale
= g.label t("department.form.new.label.name")
= g.text_field :name
%hr
%h2
- I18n.available_locales.each do |locale|
- next if locale == I18n.locale
%br
- f.globalize_fields_for_locale locale do |g|
= "Translation for"
= locale
= g.label t("department.form.new.label.name")
= g.text_field :name
= f.submit t("department.create.link"), class: "btn"
请帮助我理解我必须做的事情。