В приложении для магазина электронной торговли я хотел бы получить все заказы, соответствующие first_name
, которые были введены с помощью формы поиска и где платная == истина. Форма поиска представляет собой поисковый запрос с помощью параметров Parameters: {"utf8"=>"✓", "search"=>"john", "commit"=>"Search"}
. В контроллереRails/SQL: использование массива в качестве параметра поиска
@users = User.search(params[:search]) #returns all users with the matching first_name, e.g. 'john'
@order = Order.where('user_id = ? AND paid = ?', @users.ids, true)
Запрос в @order
работает нормально, если возвращается только один user
, например, только один пользователь называется john. Но если несколько пользователей названы John, возвращается несколько идентификаторов пользователей и возвращается сообщение об ошибке ActiveRecord::StatementInvalid
. Я понимаю, что запрос перестает работать после того, как `@users.ids - это массив с более чем одним значением.
Как создать следующий запрос: для каждого user_id вернуть все заказы (user.orders), где платная равна true.
Models
user.rb
has_many :orders
order.rb
belongs_to :users
Проблема в том, что вы считаете, что 'User.search (s)' действительно 'User.where (: name => s)', а не, скажем, запрос LIKE. –