문제

좋아, 여기에 레일 멍청이, : d

Has__many처럼 보입니다 : Thring은 많은 사람들에게 많은 관계를 다루는 가장 큰 방법이지만, 나는 이것을 간단하게 유지하려고 노력하고 있습니다. 바라건대 당신의 전문가 중 한 명이이 상황을 처리했기를 바랍니다.

여기에있는 기본 모델 설정은 다음과 같습니다.

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

레일에 대한 나의 oobish 경험은 그의 클라이언트 목록을 보유 할 배열을 가장 잘 구축하는 방법에 대한 경험을 제공하지 못합니다.

내가 생각하는 방식은 @bob.products를 사용하여 Bob이 액세스 할 수있는 제품을 얻을 수있는 제품을 찾아 각 제품과 관련된 클라이언트를 찾은 다음 단일 배열에 가입하는 것입니다. 그러나 이것이 가장 좋은 방법입니까?

감사!

도움이 되었습니까?

해결책

이것이 당신이 찾고있는 것인지 확실하지 않지만 특정 사용자에 대해 모든 승인되지 않은 클라이언트를 제거하려는 경우 :

user = current_user

@Clients_access = array.new

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

@clients_access.flatten!

다른 팁

좋아, 그래서 나는 다음과 같이 원하는 기능을 달성했다.

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

기본적으로 모든 클라이언트를 찾은 다음 링크 된 승인 된 제품을 반복하고 목록에서 제거하고 기본적으로 승인되지 않은 클라이언트 목록을 작성했습니다. 그런 다음 다시 검색을 수행하고 이미 승인되지 않은 클라이언트와 클라이언트를 정리하십시오. 그룹에 할당되었습니다. 그러나, 나는 덕트 테이프가 부족했습니다 .. 더 나은 솔루션이 있습니까?

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top