2012-04-24 4 views
0

title,title_sp,title_jpなどのフィールドを持つテーブルがあり、ユーザーの特定の言語値(jpなど)を知っている場合、どのような方法でテーブルフィールドを実行時のモデル属性。呼び出しごとにalias_attributeをfind(*args)に設定するようなものです。Rails ActiveRecord :: Baseベースのプログラム名による再マップ

の線に沿って何か:

Posts.find(:all, :conditions => {:published => true}, :language => "jp") 

Posts.titleを返したがtitle_jp.の値によってポピュレートすることは、理想的なポインタはまた、それが可能空/ nilのtitle/title_entitle_jp場合にフォールバックしなければならない追加しました。

私は.findを無効にしていましたが、フィールド名を一括して再マップする方法を整理することはできませんでした。

+0

スキーマがうまく設計されていないようです。既存のスキーマを使用しようとしているか、移行が作成されましたか? – Salil

答えて

0

このようなことは危険です。いくつかのfind_by_sqlでこれを行うことができますが、オブジェクトを元のままにしておけば、モデルが元の値ではないということをモデルが知らないため、元のタイトルを変更することができます。

より良い解決策は、パラメーターに基づいて、戻すのに最適な列を選択する仮想属性を作成することです。それは使用するには少し問題があるかもしれませんが、これははるかに安全です。ラッパーを書くことはそれほど難しくないので、1回の呼び出しで全体のコレクションにアクセスし、それぞれの仮想属性を適切な値に設定することができます。

オーバーライドするフィールドが複数ある場合は、それぞれに仮想属性を作成するための小さなソリューションを作成できます。これ以上のことが必要な場合は、私に知らせてください!

関連する問題