Ruby on rails 使用where子句查找后代-Rails 3.0和祖先

Ruby on rails 使用where子句查找后代-Rails 3.0和祖先,ruby-on-rails,model,parent-child,Ruby On Rails,Model,Parent Child,如何使用where子句在表中查找另一条记录的后代记录(仅从数据库中获取这些记录) 假设我有一棵树,上面有位置。根位置是国家,下一级别的位置是州,其子节点是城市。如何使用where子句仅查找某个州的城市 我计划检查城市的祖先字符串是否包含州的祖先字符串,但我不知道怎么做。使用由生成的作用域,例如,节点的子节点。在这里可以提供州的id。假设您有一个名为“位置”的表,您可以使用此位置表创建3个不同的模型: class Country < ActiveRecord::Base set_tabl

如何使用where子句在表中查找另一条记录的后代记录(仅从数据库中获取这些记录)

假设我有一棵树,上面有位置。根位置是国家,下一级别的位置是州,其子节点是城市。如何使用where子句仅查找某个州的城市


我计划检查城市的祖先字符串是否包含州的祖先字符串,但我不知道怎么做。

使用由生成的作用域,例如,
节点的子节点。
在这里可以提供州的id。

假设您有一个名为“位置”的表,您可以使用此位置表创建3个不同的模型:

class Country < ActiveRecord::Base
  set_table_name 'locations'
  has_many :states, :class_name => 'State', foreign_key => "parent_id"
end

class State < ActiveRecord::Base
  set_table_name 'locations'
  has_many :cities, :class_name => 'City', foreign_key => "parent_id"
  belongs_to :parent, :class_name => "Country"
end

class City < ActiveRecord::Base
  set_table_name 'locations'
  belongs_to :parent, :class_name => "State"
end
由于国家是“根元素”,因此它们没有父元素。 对于每个国家,您可以通过类似的方式找到州,例如“usa”具有id 1。其州可以通过以下方式找到:

states = State.find(:all, :conditions => {:parent_id => 1 } )
或者如果你已经把usa放在一个变量里了

usa.states
有关示例中使用的
:class\u name
:foreign\u key
和其他
选项的更多信息,请参见

注意:希望我没有犯(太多)错误,但我在菜单、子菜单及其项上也犯了类似的错误

注2:当然,如果使用3个国家、州和城市的表格,会简单得多。然后,您可以使用简单的关联

usa.states