Pregunta

Muy bien, un Rails Noob aquí,: D

Parece que has__many: a través es la mejor forma más reciente de manejar muchas relaciones, pero estoy tratando de mantener esto simple. Esperemos que uno de ustedes, gurúes, haya manejado esta situación antes:

Aquí está la configuración básica del modelo que tengo ahora:

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

Esencialmente, tengo usuarios en el sistema, que tendrán acceso (a través de la asociación) a muchos productos diferentes que se están creando, esos productos tienen muchos clientes, pero los clientes también pueden ser parte de muchos productos, y los Productos accedido por muchos usuarios.

Todas las asociaciones funcionan bien, pero ahora quiero que los usuarios puedan agregar clientes a sus productos, pero que solo vean clientes que están asociados con productos a los que también tienen acceso.

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

Mi experiencia novata con rieles no me da la experiencia sobre cómo construir mejor la matriz que contendrá su lista de clientes.

La forma en que estoy pensando es usar @ bob.products para obtener los productos a los que Bob tiene acceso para luego aprender a encontrar los clientes asociados con cada producto y luego unirlos en una sola matriz. ¿Pero es esta la MEJOR manera?

¡Gracias!

¿Fue útil?

Solución

No estoy seguro de si esto es lo que está buscando, pero si desea eliminar todos los clientes no autorizados para un usuario en particular:

user = current_user

@clients_access = Array.new

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

@ clients_access.flatten!

Otros consejos

Muy bien, así que logré la funcionalidad que quería con lo siguiente:

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

Básicamente, encontrar todos los clientes, luego iterar a través de los productos autorizados vinculados y eliminarlos de la lista, básicamente creando una lista de clientes no autorizados ... luego haciendo la búsqueda nuevamente y borrando los clientes no autorizados y los clientes ya asignados en el grupo ... Pero, me he quedado sin cinta adhesiva ... ¿alguna solución mejor?

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top