【发布时间】:2015-01-15 09:54:18
【问题描述】:
我想让我的代码块更有效率。我有两个模型和一个连接表。他们都有has_many :through 关系。有些部分属于多个组,有些只属于一个组。我需要以最有效的方式获取属于 一个组的记录,因为有数千个部分。这是我的模型:
part.rb
class Part < ActiveRecord::Base
attr_accessible :name,
:group_ids
has_many :part_groups, dependent: :destroy
has_many :groups, through: :part_groups, select: 'groups.*, part_groups.*'
end
group.rb
class Group < ActiveRecord::Base
attr_accessible :name,
:part_ids
has_many :part_groups, dependent: :destroy
has_many :parts, through: :part_groups, select: 'parts.*, part_groups.*'
end
part_group.rb
class PartGroup < ActiveRecord::Base
attr_accessible :part_id,
:group_id
belongs_to :part
belongs_to :group
end
我想做的是得到所有只属于Group A和只属于Group B的部分,而不是属于A和B的部分。经过几个小时的努力并得到我无处将其用作权宜之计:
@groupA = []
@groupB = []
Part.all.each do |part|
if part.group_ids.length == 1
if part.group_ids.first == 1
@groupA.push(part)
elsif part.group_ids.first == 2
@groupB.push(part)
end
end
end
这显然是不可扩展的,因为会有很多组。我尝试了join 和include 的各种方法,我一直在谷歌搜索,但到目前为止没有任何效果。
【问题讨论】:
标签: sql ruby-on-rails