1

我正在寻找一种方法来检查某些对象是否包含在多态关联中。

我的例子是

language.rb(这本质上是可用语言的列表)

has_many :user_languages

用户语言.rb

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

用户.rb

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

现在我想检查用户是否有某种语言。我的想法是以include?一种形式使用方法

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

但它总是返回,false虽然u.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_nameUserLanguage,u.languages是给您一组UserLanguage对象而不是Language对象。

如果你改变你的user.rb关联,如下所示,u.languages应该会给你你正在寻找的东西。

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