轨。许多语言环境同时进行验证

时间:2013-07-02 23:35:44

标签: ruby-on-rails-3 validation rails-i18n globalize3

我有一个双语网站,有两个区域设置: en ru

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

我可以使用标准表单创建和编辑部门。 区域设置来自网址:example.com/en/departments/example.com/ru/departments/

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

  1. 当前区域设置的主要表单(I18n.locale)。
  2. 用于在同一页面上添加翻译的复选框
  3. 如果复选框处于活动状态,请在主窗体旁边显示另一个区域设置的另一个表单。
  4. 最重要的是 - 每个语言环境的验证必须不同。比方说,对于 en ,它应该传递ASCII符号; ru - 西里尔文。
  5. 我的问题是第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"
    

    请帮助我理解我必须做的事情。

0 个答案:

没有答案