Domanda

Bene, qui Rails Noob: D

Sembra che has__many: through sia l'ultimo modo migliore per gestire molte o molte relazioni, ma sto cercando di mantenerlo semplice. Spero che uno di voi guru là fuori abbia gestito questa situazione prima:

Ecco la configurazione di base del modello che ho ora:

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

Essenzialmente, ho utenti nel sistema che avranno accesso (tramite associazione) a molti prodotti diversi che vengono creati, quei prodotti hanno molti clienti, ma i clienti possono anche far parte di molti prodotti e i Prodotti a cui accedono molti utenti.

Tutte le associazioni stanno funzionando bene, ma ora voglio che gli utenti siano in grado di aggiungere client ai loro prodotti, ma vedo solo i client associati ai prodotti a cui hanno accesso.

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

La mia esperienza noobish con le rotaie non riesce a darmi l'esperienza su come costruire l'array che conterrà il suo elenco di client.

Il modo in cui sto pensando è quello di utilizzare @ bob.products per ottenere i prodotti a cui Bob ha accesso, quindi per raggiungerli e trovare i client associati a ciascun prodotto e poi unirli in un singolo array. Ma è questo il modo MIGLIORE?

Grazie!

È stato utile?

Soluzione

Non sono sicuro se questo è ciò che stai cercando, ma se desideri rimuovere tutti i client non autorizzati per un determinato utente:

user = current_user

@clients_access = Array.new

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

@ clients_access.flatten!

Altri suggerimenti

Bene, quindi ho raggiunto la funzionalità che desideravo in questo modo:

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

Fondamentalmente, trovare tutti i client, quindi scorrere i prodotti autorizzati collegati e rimuoverli dall'elenco, fondamentalmente creando un elenco di clienti non autorizzati .. quindi ripetere la ricerca e cancellare i clienti non autorizzati e i clienti già assegnati al gruppo .. Ma ho esaurito il nastro isolante .. c'è qualche soluzione migliore?

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top