Ruby on rails 验证全球化字段的唯一性

Ruby on rails 验证全球化字段的唯一性,ruby-on-rails,validation,globalize,Ruby On Rails,Validation,Globalize,我有一个带有翻译字段的模型,使用gem和gem为本地化名称字段提供本地化属性,如name_en、name_zh_hk 例如: class Person < ActiveRecord::Base translates :name globalize_accessors: locales: [:en, :"zh-HK"], attributes: [:name] # problem is: validates :name, presence: true, uniqueness

我有一个带有翻译字段的模型,使用gem和gem为本地化名称字段提供本地化属性,如name_en、name_zh_hk

例如:

class Person < ActiveRecord::Base
  translates :name
  globalize_accessors: locales: [:en, :"zh-HK"], attributes: [:name]

  # problem is:
  validates :name, presence: true, uniqueness: true
end
因此,现在name_en和name_zh_hk可以正确地获取和设置相应区域设置中的值

但是,validates:name只验证Person模型中的name字段。我还想验证中文输入的唯一性

简而言之,我想用一种简单的方法来验证name_en和name_zh_hk的唯一性

**我有一张表格要提交name_en和name_hk。

在person.rb模型文件的末尾,在类person之外。。。最后,添加以下内容:

Person::Translation.class_eval do
  validates_presence_of :name
  validates_uniqueness_of :name
end
在person.rb模型文件的末尾,在类person之外。。。最后,添加以下内容:

Person::Translation.class_eval do
  validates_presence_of :name
  validates_uniqueness_of :name
end

我可能会对您询问的唯一作用域感到困惑:

 validates :name, uniqueness: {scope: :blah}
具体来说,您可能需要一个PersonName模型

人名

姓名|本地|人员| id

这个人有很多名字

然后有:

validates :name, uniqueness: { scope: :person_id }

这样,如果他们为HK输入的名称与:en的名称相同,则该名称无效。

我可能会混淆您对唯一作用域的要求:

 validates :name, uniqueness: {scope: :blah}
具体来说,您可能需要一个PersonName模型

人名

姓名|本地|人员| id

这个人有很多名字

然后有:

validates :name, uniqueness: { scope: :person_id }

这样,如果他们为HK输入的名称与:en的名称相同,则该名称无效。

使用以下代码解决

模型

验证器


用下面的代码解决

模型

验证器

你必须这样做

class Person < ActiveRecord::Base
  translates :name

  class Translation
    validates :name, presence: true, uniqueness: true
  end
end
你必须这样做

class Person < ActiveRecord::Base
  translates :name

  class Translation
    validates :name, presence: true, uniqueness: true
  end
end

你试过我没有试过吗:?当它的待办事项/已知问题部分中区分大小写设置为false时,它还不能与rails 3.0一起工作,而我正在使用Rails4。它不能给我在生产代码中使用的信心。它适用于3.1、3.2但不适用于3.0,而它适用于2.x但还不适用于3.x。但我同意-也不会太自信:你试过了吗?我没有:?当在它的待办事项/已知问题部分中区分大小写设置为false时,它还不能与rails 3.0一起工作,而我正在使用rails 4。它不能给我在生产代码中使用的信心。它适用于3.1、3.2但不适用于3.0,而它适用于2.x但还不适用于3.x。但我同意——也不会太自信: