2012-07-10 88 views
2

我有我想以做玩家一些搜索使用以下机型协会:Rails:用连接模型查找 - 如何?

class Player < ActiveRecord::Base 
belongs_to :user 
has_many :abilities 
has_many :sports, :through => :abilities 
... 
end 

class User < ActiveRecord::Base 
    has_one :player 
... 
end 

class Ability < ActiveRecord::Base 
    belongs_to :player 
    belongs_to :sport 
    has_one :level 
    ... 
end 

class Sport < ActiveRecord::Base 
    has_and_belongs_to_many :category_sports 

    has_many :abilities 
    has_many :players, :through => :abilities 
    ... 
end 

class CategorySport < ActiveRecord::Base 
has_and_belongs_to_many :sports 
end 

我有一个表格,其中用户可以填写两个输入:城市运动

城市字段在用户模型中为(@user.city),运动场可以在CategorySport中为(@category_sport.name)或运动模型为(@sport.name)。

现在我有以下在球员模型进行搜索:

def search 
    self.find(:all,:include => 'user',:conditions => ['users.city LIKE ?', "%#{city}%"]) 
end 

我想知道我将如何添加一个连接模型(能力)和相关的(运动,categorysport)在这个查询中也是为了通过运动找到。所以,不仅仅是为用户城市找到,也是通过体育。

回答

1

试试这个:

def search 
    self.includes(:user, :abilities => {:sport => :category_sports}). 
    where(['users.city LIKE ? OR category_sports.name=? OR sports.name=?', 
     "%#{city}%", sport, sport]) 
end 
+0

它不工作。如果城市不是LIKE的任何记录,它不会返回任何东西... – 2012-07-13 01:03:33

+0

你的意思是,只有当'用户'没有匹配时才会得到不正确的结果吗?这很奇怪。我可以看到生成的SQL吗? – HargrimmTheBleak 2012-07-13 04:40:38

+0

我的不好。抱歉。感谢你的回答。 – 2012-07-13 15:33:35