In einer E-Commerce-Shop-Anwendung möchte ich alle Bestellungen abrufen, die eine first_name
entsprechen, die über ein Suchformular eingegeben wurde und wo bezahlt == wahr ist. Das Suchformular reicht den Suchbegriff über die Parameter Parameters: {"utf8"=>"✓", "search"=>"john", "commit"=>"Search"}
ein. In der SteuerungRails/SQL: Verwenden eines Arrays als Suchparameter
@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)
Die Abfrage in @order
funktioniert gut, wenn nur ein user
zurückgegeben wird, zum Beispiel nur ein Benutzer heißt John. Wenn jedoch mehrere Benutzer John heißen, werden mehrere Benutzer-IDs zurückgegeben und die Fehlernachricht ActiveRecord::StatementInvalid
wird zurückgegeben. Mein Verständnis ist, dass die Abfrage nicht mehr funktioniert, wenn `@users.ids ein Array mit mehr als einem Wert ist.
Wie strukturiere ich die folgende Abfrage: Geben Sie für jede user_id alle Bestellungen (user.orders) zurück, bei denen bezahlt gleich wahr ist.
Models
user.rb
has_many :orders
order.rb
belongs_to :users
Das Problem hier ist, dass Sie davon ausgehen, dass 'User.search (s)' ist wirklich 'User.where (: name => s)' anstatt etwa LIKE-Abfrage. –