Подтвердить что ты не робот

Rails - Find By с двумя полями?

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

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])
4b9b3361

Ответ 1

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

Ваш пример ниже работает:

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

- Обратите внимание, что ваш пример состоял из двух user_ids

В рельсах 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

Ответ 2

Rails 4 вводит метод find_by:

Permission.find_by(user_id: params[:user_id], project_id: params[:project_id])

Ответ 3

Попробуйте следующее:

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

Ответ 4

Рельсы 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])