0

titletitle_sp、などのフィールドを持つテーブルがありtitle_jp、ユーザーの特定の言語値 (jp など) を知っている場合、実行時にテーブル フィールドをモデル属性に再マップする方法は何でしょうか。で呼び出しごとに alias_attribute を設定するようなものですfind(*args)

次のようなもの:

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

追加された理想的なポインターの値によって返さPosts.titleれた値が入力されるようにすると、 nil/empty の場合title_jp.にフォールバックすることもできます。title/title_entitle_jp

オーバーライドについて掘り下げてきましたが.find、フィールド名を一括で再マップする方法を整理できませんでした。

4

1 に答える 1

0

そのようなことをするのは危険です。これはいくつかの find_by_sql で行うことができますが、オブジェクトを元に戻すと、元の値ではないことをモデルが認識できないため、元のタイトルを変更する可能性があります。

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

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

于 2012-04-25T12:17:27.170 に答える