Question

Bien, un Noob Rails ici,: D

On dirait que has__many: through est le dernier moyen de gérer de nombreuses relations, mais j’essaie de garder cela simple. Espérons que l'un de vos gourous ait déjà géré cette situation:

Voici la configuration de base du modèle que j'ai maintenant:

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

J'ai essentiellement des utilisateurs dans le système qui auront accès (par association) à de nombreux produits en cours de création. Ces produits ont de nombreux clients, mais ces derniers peuvent également faire partie de nombreux produits. consulté par de nombreux utilisateurs.

Toutes les associations fonctionnent bien, mais je souhaite maintenant que les utilisateurs puissent ajouter des clients à leurs produits, mais uniquement les clients associés à des produits auxquels ils ont accès.

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

Mon expérience de noobish avec les rails ne me permet pas de construire au mieux le tableau qui contiendra sa liste de clients.

La façon dont je pense être d'utiliser @ bob.products pour obtenir les produits auxquels Bob a accès, puis les contacter et trouver les clients associés à chaque produit, puis les joindre à un seul tableau. Mais est-ce la meilleure façon?

Merci!

Était-ce utile?

La solution

Vous ne savez pas si c'est ce que vous cherchez, mais si vous souhaitez supprimer tous les clients non autorisés pour un utilisateur particulier:

utilisateur = utilisateur actuel

@clients_access = Array.new

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

@ clients_access.flatten!

Autres conseils

Très bien, j'ai donc réalisé la fonctionnalité que je voulais par ce qui suit:

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

Fondamentalement, rechercher tous les clients, puis parcourir les produits autorisés liés et les supprimer de la liste, en créant une liste de clients non autorisés .. puis refaire la recherche et effacer les clients non autorisés et les clients déjà affectés dans le groupe .. Mais, je suis à court de ruban adhésif en toile .. de meilleures solutions?

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top