考えられる解決策がいくつかあります。私の最初の選択は、aalang:string
フィールドを追加して、categorysparent_id:integer
テーブルに追加することです。次に、自己参照関連をCategory
モデルに追加します (Category と呼ばれると思います...)。
belongs_to :translated, :class_name => 'Category', :foreign_key => 'parent_id'
has_many :translations, :class_name => 'Category', :foreign_key => 'parent_id'
次に、フィールドでフィルタリングするスコープをモデルに追加しますlang
。
scope :language, lambda{|lang| where("lang = ?", lang)}
そしてtranslate
方法です。
def translate(lang)
self.translations.language(lang).first if self.translations.language(lang).any?
end
したがって、メイン言語を 1 つ設定し、他の言語をいくつでも追加できます。
別の可能性はtranslations:text
、モデルとserialize
それにフィールドを追加することです。したがって、シリアル化されたハッシュに翻訳を保存できます。そのソリューションの欠点は、シリアル化されたフィールドを簡単に検索できないことです。