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])
Ответы
Ответ 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])