0

has_oneそのプロファイルのユーザーモデルがあります。ユーザーモデルに次のコードがあります。

class User < ActiveRecord::Base
 scope :city, lambda { |user| joins(:profile).where(:profiles => {:city => user.profile.city})}
end

次に、Usersコントローラーのインデックスアクションで:

  def index
   @users = User.city(current_user).paginate :page => params[:page], :per_page => 20
  end

これにより、と同じ都市からすべてのユーザーを取得できますcurrent_user。また、プロフィール写真をアップロードしているユーザーのみを取得したいと思います。私はペーパークリップを使用しており、画像の列はユーザ​​ーテーブルにあります。のようなものを追加したかったshow users where image_file_name != nil。ただし、上記のスコープにはプロファイルテーブルが含まれます。クエリをマージして、Usersテーブルの列とprofilesテーブルの列を含めるにはどうすればよいですか?

4

1 に答える 1

3

Railsでスコープを結合して、最終的なクエリを作成できます。

class User < ActiveRecord::Base
  scope :city, lambda { |user| joins(:profile).where(:profiles => {:city => user.profile.city})}
  scope :with_pictures, where('users.image_file_name IS NOT NULL')
end

それがデータベースがnull以外の列を見つけるために使用するものであると仮定します。

そして、あなたのコントローラーで:

def index
  @users = User.city(current_user).with_pictures.paginate :page => params[:page], :per_page => 20
end
于 2013-03-21T04:45:14.587 に答える