سؤال

حسنا، مستجد القضبان هنا،: D

ويبدو has__many: من خلال هو أحدث أعظم وسيلة للتعامل مع العديد إلى العديد من العلاقات، ولكن أحاول أن تبقي هذه البساطة. نأمل أحد من أنت المعلم وتعاملت مع هذا الوضع هناك قبل:

وهنا هو الإعداد النموذج الأساسي لدي الآن:

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

وتجربتي noobish مع القضبان فشلت أن تعطيني خبرة حول كيفية بناء أفضل مجموعة التي ستعقد قائمة موكله.

والطريقة وأنا أفكر أن يكون لاستخدام @ bob.products للحصول على المنتجات بوب لديه حق الوصول إلى ثم إلى. كل هؤلاء، والعثور على عملاء المرتبطة مع كل منتج ومن ثم ينضم اليهم في مجموعة واحدة. ولكن هل هذا هو أفضل وسيلة؟

وشكرا!

هل كانت مفيدة؟

المحلول

ولست متأكدا إذا كان هذا هو ما كنت أبحث عنه، ولكن إذا كنت ترغب في إزالة كافة العملاء غير المصرح به لمستخدم معين:

والمستخدم = CURRENT_USER

وclients_access = Array.new

وuser.products.each {| ع | @ 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