2

プレーヤーの検索を行うために使用したい次のモデルの関連付けがあります。

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

ユーザーが都市スポーツの2つの入力を入力できるフォームがあります

都市フィールドは ( ) として User モデルに@user.cityあり、スポーツ フィールドは ( ) として CategorySport として、@category_sport.nameまたは ( ) として Sport モデルのいずれかにあります@sport.name

現在、Playerモデルで検索を実行するために次のものがあります。

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

スポーツでも検索するには、結合モデル (能力) と関連 (スポーツ、カテゴリスポーツ) をこのクエリに追加する方法を知りたいです。そのため、ユーザーの都市だけでなく、スポーツ別に検索することもできます。

4

1 に答える 1

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
于 2012-07-11T18:18:45.593 に答える