2016-06-05 5 views
0

Ich habe eine Rails Json API mit 2 Modellen (Bags und Items). Ich verwende aktive Record-Serializer mit MySQL, um die json-Ausgabe zu organisieren. Ich möchte alle Bags für alle Benutzer anzeigen, aber nur Items für den aktuellen Benutzer.Rails JSON API: Grenze has_many Beziehung zu current_user

die Suche nach so etwas wie diese:

class Bag < ActiveRecord::Base 
    has_many :items,-> {where current_user: "#{current_user.id}"},class_name: 'Items' 
end 

Ich weiß nicht, von einer Art, die current_user.id Eigenschaft zum Modell zu übergeben. Hoffe, dass jemand einen Weg kennt.

Antwort

0

Zwei Dinge:

  1. Sie nicht Controller und Helfer Methoden direkt in Ihren Modellen zugreifen können. Sie müssen sie an Ihr Modell weitergeben. Eine einfache Möglichkeit wäre das Hinzufügen einer Methode oder eines Bereichs.
  2. Assoziation Abfrageanpassung nicht Unterstützung Argument Übergabe an Ihren Block (-> {where current_user: ...). Also, Sie können es nicht in der Assoziationserklärung tun.

Also, ich denke Sie einen Bereich hinzufügen müsste:

class Bag < ActiveRecord::Base 
    has_many :items 
    scope :user_items, ->(user) { where(items: {current_user: user}) } 
end 

PS. Sie müssen "#{current_user.id}" nicht in eine Zeichenfolge konvertieren.

+0

Ja, links die "# {curent_user.id}" in zum Beispiel Zwecke. Habe es nur für dieses Beispiel nicht geändert. Aber woher kommt das Argument "-> (user)"? Der Controller? – AthleteInAction

+0

spielt keine Rolle. Sie können es überall aufrufen und eine Instanz Ihres Benutzers übergeben: 'Bag.user_items (current_user)'. – Uzbekjon

Verwandte Themen