1

特定のオブジェクトがポリモーフィック アソシエーションに含まれているかどうかを確認する方法を探しています。

私の例は

language.rb (これは本質的に利用可能な言語のリストです)

has_many :user_languages

user_language.rb

belongs_to :language
belongs_to :speakable, :polymorphic => true

user.rb

has_many :languages, :class_name => 'UserLanguage', :as => :speakable

ここで、ユーザーが特定の言語を持っているかどうかを確認したいと思います。私が持っていたアイデアは、include?メソッドを次の形式で使用することです

u = User.find(1)
l = Language.find(1)
u.languages.include?(l)

しかし、それは常に返さfalseu.languagesますが、

#<UserLanguage id: 1, language_id: 1, speakable_id: 1, speakable_type: "User">

この小切手を手配する適切な方法は何ですか?

ありがとうございました!

4

1 に答える 1

2

あなたの問題はここにあるようです

has_many :languages, :class_name => 'UserLanguage', :as => :speakable

に設定class_nameしたためUserLanguage、オブジェクトではなくオブジェクトu.languagesのセットが提供されます。UserLanguageLanguage

user.rb以下のように関連付けを変更すると、u.languages探しているものが得られるはずです。

has_many :user_languages, :as => :speakable
has_many :languages, :through => :user_languages
于 2012-12-20T06:17:55.597 に答える