Greetings,lọc đối tượng trẻ em trong một has_many: thông qua mối quan hệ trong Rails 3
Tôi có một ứng dụng mà Companies
và Users
cần phải thuộc về nhau thông qua một mô hình CompanyMembership
, trong đó có thông tin thêm về tư cách thành viên (đặc biệt, Người dùng có phải là quản trị viên của công ty hay không, thông qua giá trị boolean admin
). Một phiên bản đơn giản của các mã:
class CompanyMembership < ActiveRecord::Base
belongs_to :company
belongs_to :user
end
class Company < ActiveRecord::Base
has_many :company_memberships
has_many :users, :through => :company_memberships
end
class User < ActiveRecord::Base
has_many :company_memberships
has_many :companies, :through => :company_memberships
end
Tất nhiên, điều này làm cho nó đơn giản để có được tất cả các thành viên của một công ty thông qua company.users.all
, et al. Tuy nhiên, tôi đang cố gắng để có được danh sách tất cả Người dùng trong Công ty là quản trị viên của Công ty đó (và cũng để kiểm tra xem người dùng có phải là quản trị viên của một công ty cụ thể hay không). giải pháp đầu tiên của tôi đã được như sau trong company.rb
:
def admins
company_memberships.where(:admin => true).collect do |membership|
membership.user
end
end
def is_admin?(user)
admins.include? user
end
Trong khi làm việc này, một cái gì đó cảm thấy không hiệu quả về nó (nó lặp lại trên mỗi thành viên, thực hiện SQL mỗi lần, ngay Hoặc là Relation thông minh hơn mà?), và tôi 'không chắc chắn nếu có một cách tốt hơn để đi về điều này (có lẽ bằng cách sử dụng phạm vi hoặc fancy mới Relation
đối tượng Rails 3 sử dụng?).
Bất kỳ lời khuyên nào về cách tốt nhất để xử lý (tốt nhất là sử dụng thực hành tốt nhất Rails 3) sẽ được đánh giá cao!
Một bước gần hơn! Trong khi nó không phải là câu trả lời tôi đang tìm kiếm, nó dẫn tôi đến nó :) –