Pergunta

Tudo bem, um Rails Noob aqui,: D

Parece que has__many: por meio é a última e melhor maneira de lidar com muitos para muitos relacionamentos, mas eu estou tentando manter isso simples. Esperemos que um de vocês guru lá fora, têm tratado esta situação antes:

Aqui está a configuração do modelo básico que eu tenho agora:

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

Essencialmente, eu tenho os usuários do sistema, que terá acesso (através da associação) para muitos produtos diferentes que estão sendo criados, esses produtos têm muitos clientes, mas os clientes também podem ser uma parte de muitos produtos, e os produtos acessados ??por muitos usuários.

Todas as associações estão a trabalhar bem, mas agora eu quero que os usuários possam adicionar clientes para os seus produtos, mas apenas ver os clientes que estão associados com produtos que têm acesso também.

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

A minha experiência noobish com trilhos deixa de me dar a experiência sobre como melhor construir a matriz que vai realizar a sua lista de clientes.

A maneira que eu estou pensando ser a utilização @ bob.products para obter os produtos Bob tem acesso, em seguida, para .each aqueles e encontrar os clientes associados a cada produto e, em seguida, se juntar a eles em uma única matriz. Mas esta é a melhor maneira?

Obrigado!

Foi útil?

Solução

Não tenho certeza se é isso que você está procurando, mas se você quiser remover todos os clientes não-autorizado para um usuário em particular:

user = current_user

@clients_access = Array.new

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

@ clients_access.flatten!

Outras dicas

Tudo bem que eu consegui a funcionalidade que eu queria a seguinte redacção:

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

Basicamente, encontrar todos os clientes, em seguida, iterar os produtos autorizados ligados e removê-los da lista, basicamente, criar uma lista de clientes não-autorizados .. então fazer a busca novamente e limpando o clientes não autorizados e os clientes já atribuído no grupo .. Mas, eu corri para fora de fita adesiva .. quaisquer soluções melhores?

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top