2016-08-09 6 views
1

Ich habe ein Kundenmodell, das das Attribut private hat. Dieses Attribut ist nur für insgesamt 3 Benutzer in der Datenbank sichtbar. Wenn diese Methode (check_box) von einem dieser 3 Benutzer überprüft wird, ist der Kunde nur für sie sichtbar.Schleifen über Datensätze mit der Bedingung

Ich Looping derzeit alle Kunden wie folgt über:

<% @customers.where(:private => false).each do |single_customer| %> 

Meine Frage ist, wie kann ich erreichen, wenn einer der 3 Benutzer in diesem :private => false unterzeichnet wird zu @customers.each do |single_customer| geändert, weil dann ich don Ich möchte das private Attribut nicht mehr filtern.

Antwort

1

Sie müssen den Aufbau der Schleife ändern. Dieser Ausschnitt ist ein bisschen von Meta-Programmierung, aber man kann es wie folgt tun:

# in the controller for example. 
@customers = Customer.where(private: false) 
@customers = Customer.all if current_user.is_my_special_user? 

In der Ansicht, die Sie dann dies einfach tun: <% @customers.find_each do |customer| %>

  • Verwendung find_each für eine bessere Leistung, wenn Ihre Sammlung ist riesig .
  • standardmäßig verwenden Sie die private: false
  • , wenn Sie Ihren Benutzer erkennen ist angemeldet, können Sie die @customers
+2

wo ist die 'Meta-programming' schreiben? –

+0

Ich weiß nicht, ob er eine 'current_user' Methode definiert hat, noch die Logik in seiner Klasse. Die Metaprogrammierung bezieht sich also auf die verwendeten Methoden. –

+1

Funktioniert perfekt, danke! Anstatt '@customers = Kunden..' sollte es' Kunde' sein. Akzeptiert die Antwort. –

Verwandte Themen