查询的正确方法是什么:当条件进入时,has_many:through

时间:2011-11-17 13:45:45

标签: ruby-on-rails activerecord

我有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

第一种方式很简单,第三种方式很酷但我不知道怎么做。

1 个答案:

答案 0 :(得分:1)

Company上创建范围,例如:

scope :published, where(:is_publish => true)

然后在用户上致电:

user.companies.published

要检查代码的有效性,可以使用to_sql方法。