【发布时间】:2025-12-29 01:25:06
【问题描述】:
我很难做到这一点,这不是实施的直接问题,但我不明白哪种方法是正确的,我有两个选择,但首先,这些是我的模型:
class Boat < ActiveRecord::Base
validates :name, presence: true, uniqueness: { case_sensitive: false }
has_many :tech_specs, order: 'position'
def visible?
self.visible
end
end
class TechSpec < ActiveRecord::Base
validates :boat_id, presence: true
validates :tech_spec_name_id, presence: true, uniqueness: { scope: :boat_id }
belongs_to :boat
belongs_to :tech_spec_name
before_destroy :destroy_name_if_required
acts_as_list scope: :boat
def as_json(options = {})
super(options.except!(:tech_spec_name_id).merge!(methods: [self.name]))
end
def name
self.tech_spec_name.try(:name) || ''
end
def name=(value)
self.tech_spec_name = TechSpecName.find_or_create_by_name(value)
end
def destroy_name_if_required
self.tech_spec_name.destroy if self.tech_spec_name.tech_specs.size <= 1
end
end
class TechSpecName < ActiveRecord::Base
validates :name, presence: true, uniqueness: { case_sensitive: false }
has_many :tech_specs
def self.with_name_like(str)
where('lower(name) LIKE lower(?)', "%#{ str }%")
end
end
问题是我想要一个船的页面在使用语言环境时显示一些技术规范,在不同的语言环境中显示其他技术规范。
想法 #1
我的基本想法是在 tech_spec.value 和 TechSpecName 字段 tech_spec_name.name 上添加 TechSpec globalize3
想法 #2
另一个想法是删除 TechSpecName,而是使用将完全“替换”TechSpecName 的字段 (tech_spec.name)。请注意,在这种情况下,我仍然需要为自动完成获取名称,但我将在 TechSpec 中过滤它们,而不是从 TechSpecName 中获取所有名称。这个字段显然会再次使用 globalize3。
我不知道这两种方法的缺点,所以我需要一个建议。
【问题讨论】:
标签: ruby-on-rails internationalization ruby-on-rails-3.2 globalize3