【发布时间】:2011-08-21 19:37:12
【问题描述】:
解决此类查询的最佳方法是什么:
- 每个组有很多区
- 每个州都有很多区
- 每个组通过地区有许多州
- 每个区属于一个成员
Group 1 -- * District (属于一个成员) * -- 1 State
我想查找特定组的州列表,其中 至少有一个 的地区没有分配给成员(即地区的 member_id 为空)。换句话说,如果该州的所有区都已分配给一个成员,则该州不会出现在我的列表中。
class State < ActiveRecord::Base
has_many :districts
end
class Group < ActiveRecord::Base
has_many :districts
has_many :states, :through => :districts, :uniq => true
end
class District < ActiveRecord::Base
belongs_to :state
belongs_to :group
belongs_to :member
end
在我看来,我想要完成的是让用户首先选择他的组,然后选择他想要工作的州,最后是根据他的组和州选择填充的可用地区。所以基本上我不希望州列表包括没有可用区的州。
编辑:
我想出的一个可能的解决方案是在我的 Group 类中定义一个新方法,请告诉我这是否是一个好的解决方案:
class Group < ActiveRecord::Base
...
def available_states
result = []
self.states.each do |state|
state_list = state.districts & self.districts.where(:member_id => nil)
if !state_list.empty?
result << state
end
end
result
end
end
【问题讨论】:
标签: ruby-on-rails ruby-on-rails-3