好吧,这里有一个Rails Noob,:D
看起来像has__many:through是处理多对多关系的最新方式,但我试图保持这个简单。希望你们中的一位大师以前处理过这种情况:
以下是我现在的基本模型设置:
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
基本上,我有系统中的用户,可以访问(通过关联)许多正在创建的不同产品,这些产品有许多客户端,但客户端也可以是许多产品的一部分,而产品许多用户访问过。
所有协会都运作良好,但现在我希望用户能够将客户端添加到他们的产品中,但只能看到与他们有权访问的产品相关联的客户。
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
我对rails的低成本经验无法给我带来如何最好地构建将保存其客户列表的数组的经验。
我的想法是使用@ bob.products来获取Bob有权访问的产品。然后找到与每个产品相关联的客户端,然后将它们连接到一个数组中。但这是最好的方式吗?
谢谢!
答案 0 :(得分:1)
不确定这是否是您要查找的内容,但是如果您要删除特定用户的所有非授权客户端:
user = current_user
@clients_access = Array.new
user.products.each {| p | @ clients_access.push(p.clients).uniq! }
@ clients_access.flatten!
答案 1 :(得分:0)
好吧,所以我通过以下方式实现了我想要的功能:
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
基本上,找到所有客户端,然后遍历链接的授权产品并从列表中删除它们,基本上创建一个非授权客户端列表..然后再次进行搜索并清除未授权的客户端和已经在集团中分配的客户..但是,我已经用完了胶带......还有更好的解决方案吗?