0

我對此很難,這不是一個直接的實施問題,但我不明白哪個是正確的做法,我有兩個選擇,但首先,這些是我的模型:模型has_many OtherModel但本地化,如此不同OtherModel相同基於語言環境的模型:怎麼樣?

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

我的基本思路是增加TechSpec globalize3上tech_spec.value和TechSpecName現場tech_spec_name.name

理念#2

的另一種思路是刪除TechSpecName,而是使用將完全替換TechSpecName的字段(tech_spec.name)。請注意,在這種情況下,我仍然需要爲自動完成提取名稱,但我會在TechSpec中過濾它們,而不是從TechSpecName中提取所有名稱。該字段將再次使用globalize3。

我不知道這兩種方法的缺點,所以我需要一個建議。

回答

0

似乎想法#1是好的,它可以正常工作並減少Db中重複文本的數量。

I18n.with_locale幫助很多,也Globalize.with_locale有幫助

相關問題