Frage

In Ordnung, eine Rails Noob hier: D

Es sieht aus wie has__many: durch den neuesten besten Weg ist, viele zu viele Beziehungen zu handhaben, aber ich versuche, diese einfach zu halten. Hoffentlich von euch Gurus da draußen haben diese Situation behandelt vor:

Hier ist das Basismodell Setup Ich habe jetzt:

class User < ActiveRecord::Base
   has_and_belongs_to_many :products
end
class Product < ActiveRecord::Base
   has_and_belongs_to_many :users
   has_and_belongs_to_many :clients
end
class Client < ActiveRecord::Base
   has_and_belongs_to_many :products
end

Im Wesentlichen, ich habe Benutzer im System, das den Zugriff (durch Assoziation) zu viele verschiedene Produkte haben, die erstellt werden, diese Produkte viele Kunden haben, aber die Kunden können auch ein Bestandteil vieler Produkte und die Produkte sein Zugriff von vielen Benutzern.

Alle diese Verbände arbeiten gut, aber jetzt möchte ich Benutzer in der Lage sein, Kunden, ihre Produkte hinzuzufügen, sondern nur sehen Kunden, die mit Produkten verbunden sind, haben sie Zugang zu.

Scenario:
 Given Bob has access to product A and B
 And does NOT have access to product C
 And and has clients on product B
 And wants to add them to product A.
 When in product A Bob should see clients from product B in his add list,
 And Bob should not see clients from product C

Meine noobish Erfahrung mit Schienen versagt mir die Erfahrung zu geben, wie man am besten das Array erstellen, die seine Kundenliste halten werden.

So wie ich @ bob.products zu benutzen denke, die Produkte Bob Zugang zu dann diejenigen zu .each hat zu erhalten und die Kunden mit jedem Produkt gefunden und sie dann in ein einziges Array zu verbinden. Aber ist dies der beste Weg?

Danke!

War es hilfreich?

Lösung

Nicht sicher, ob dies ist, was Sie suchen, aber wenn Sie mögen alle nicht autorisierten Clients für einen bestimmten Benutzer entfernen:

user = current_user

@clients_access = Array.new

user.products.each {| p | @ Clients_access.push (p.clients) .uniq! }

@ clients_access.flatten!

Andere Tipps

In Ordnung, damit ich die Funktionalität erreicht I durch die folgende wollte:

user = current_user
      @clients_no_access = Client.find(:all, :order => :business_name)
      user.products.each do |product|
        @clients_no_access -= product.clients
      end
      @all_clients = Client.find(:all,
      :order => :business_name) - @clients_no_access - @product.clients

Grundsätzlich finden die alle Clients, dann durch die verknüpften zugelassenen Produkte iterieren und sie aus der Liste zu entfernen, im Grunde eine Liste von nicht-autorisierten Clients zu schaffen .. dann die Suche wieder tun, und die nicht-autorisierte Clients Ausräumen und die Kunden bereits in der Gruppe zugeordnet .. Aber ich habe aus Kanal-Band lief .. keine bessere Lösungen?

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top