Rails - найти по 2 полям? - PullRequest
       1

Rails - найти по 2 полям?

50 голосов
/ 14 октября 2010

У меня есть следующее в контроллере

def update
    @permission = Permission.find_by_user_id(params[:user_id])

Но я хочу, чтобы оно также находилось по другому параметру, project_id

Как я могу сделать что-то подобное в Rails?

@permission = Permission.find_by_user_id_and_project_id(params[:user_id],params[:user_id])

Ответы [ 4 ]

65 голосов
/ 14 октября 2010

Да, вы можете сделать поиск несколькими способами.

Ваш приведенный ниже пример работает:

@permission = Permission.find_by_user_id_and_project_id(params[:user_id],params[:project_id])

- Обратите внимание, что в вашем примере было два user_ids

В rails 2.x вы также можете использовать условия

@permission = Permission.find(:conditions=>["user_id=? and project_id=?", params[:user_id], params[:project_id]])

А в Rails 3 вы можете быть крутым, как:

@permission = Permission.where(:user_id=>params[:user_id]).where(:project_id=>params[:project_id]).first
61 голосов
/ 13 августа 2014

Rails 4 представляет метод find_by:

Permission.find_by(user_id: params[:user_id], project_id: params[:project_id])
4 голосов
/ 14 октября 2010

Рельсы 3-х ходовые с областями применения:

scope :by_user_id_and_project_id, lambda {|user_id,project_id| 
    where(:user_id=>user_id).where(:project_id=>project_id])
}

И тогда вы можете использовать его как:

@permission = Permission.by_user_id_and_project_id(params[:user_id],params[:project_id])
4 голосов
/ 14 октября 2010

Попробуйте это:

@permission = Permission.find(:conditions => ['user_id = ? and project_id = ?', params[:user_id], params[:project_id]])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...