2

我有一个具有两种语言环境的双语网站:enru

我希望我的网站有 i18n。我使用“ globalize3 ”和“ easy_globalize3_accessors ”宝石。

我可以使用标准表格创建和编辑部门。语言环境由 URL:example.com/en/departments/example.com/ru/departments/

现在如果我想创建一个新的部门项目,我会看到这样的事情:

  1. 当前语言环境的主要形式 (I18n.locale)。
  2. 在同一页面上添加翻译的复选框。
  3. 如果复选框处于活动状态,则在主表单旁边显示另一个区域设置的另一个表单。
  4. 最重要的是——每个语言环境的验证必须不同。说,对于en它应该传递 ASCII 符号;对于ru——西里尔字母。

我的问题是第 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"

请帮助我了解我必须做什么。

4

0 回答 0