我有3个模特
class User < ActiveRecord::Base
has_many :profiles
has_many :companies, :through => :profiles
end
class Company < ActiveRecord::Base
has_many :profiles
has_many :users, :through => :profiles
end
class Profile < ActiveRecord::Base
belongs_to :company
belongs_to :user
end
当我想查询所有公司表单用户时。我只需输入
u = User.find(:first)
companies = u.companies
但是当我想查询只有
的公司时profile.is_publish == ture
首先:我应该在User中创建方法
def published_companies
companies.where('profiles.is_publish' => true)
end
companies = u.published_companies
第二:我应该在公司
中创建范围scope :published, joins(:profiles).where('profiles.is_publish' => true)
companies = u.companies.published
第三:我应该在个人资料
中创建一个范围companies = u.profile.published.companies
第一种方式很简单,第三种方式很酷但我不知道怎么做。
答案 0 :(得分:1)
在Company
上创建范围,例如:
scope :published, where(:is_publish => true)
然后在用户上致电:
user.companies.published
要检查代码的有效性,可以使用to_sql
方法。