0

文字列形式の列名 (例: "hamburger_id" または "foo_bar_id") を指定して、クラス (またはクラス名) に到達する標準的な方法はありますか。この場合、ハンバーガーかFooBarか?

私が考えることができた唯一の方法はこれでした:

column_name[0, column_name.length - 3].camelize.constantize

変数 column_name には常に末尾に「_id」を含む文字列が含まれており、対応するクラスが常に存在すると想定 (または規定) できます。

関連性がある、または興味がある人がいる場合は、「理由」について詳しく説明できますが、そのような詳細で質問を混乱させたくありません.

4

1 に答える 1

2

次のようにすることができます(has_manyコメントモデルを持つPostモデルの従来のRailsの例を想定)。

Model.reflect_on_all_associations.select{|a| a.foreign_key == 'column_name'}.first.class_name

これには、クラス名と外部キーが整列していない場合でも、正しいクラス名が付けられるという利点があります。たとえば、外部キーがであるowner_idが、関連付けられたモデルが実際に名前が付けられているUser場合、これは"User"の代わりに返され"Owner"ます。

これはまだ少しハックのように感じますが、これは、列名に基づいてこの情報を取得するのがRailsにあまり似ていないためです。通常は、(を使用してreflect_on_association(:foos))関連付けを直接操作します。

于 2013-03-06T21:24:50.667 に答える