Rails 自连接的 model 如何设计 route 呢?

ytwman · 2013年09月02日 · 最后由 Rei 回复于 2013年09月02日 · 2819 次阅读

项目中有个关于地区的表,国家->省->市->区->镇->乡这样的一个层级。然后定义的表结构如下:

area
  |-id
  |-name
  |-code
  |-parent_id

现在使用 rails 的 actsastree gem 做的自连接,在原有的 area model 上增加了 children 和 parent 两个成员变量作为自连接的引用对象。

但是 restful 风格路由的时候 却不知道该怎么取弄了。

resources :areas

首先取出了第一级的地区,http://localhost:3000/areas/ 我要接下去去取第二级数据去展示在一个页面里面或者在一个页面里编辑第二级的数据,那 route 要怎么设计呢?

resources :countries, controller: :areas
resources :provinces, controller: :areas
resources :cities, controller: :areas
...

没搞过这个,不负责任瞎猜……

#1 楼 @nightire 赶脚不是这样,这样反而沉余了。

#2 楼 @ytwman 理解。但是如果嵌套的话我觉得有点太复杂了,REST 式不是说最好不超过两层么?从资源的角度来考虑,每一级其实都是一类资源(尽管它们来自于同一个模型),虽然它们有父子关系,但是要用 URI 完全体现这种关系的话也太啰嗦了吧?

要么就是只显示父子,比如 /countries/1/provinces/1/provinces/1/cities/1 这样?

不过我没做过这样的,说不好有没有更好的方案。

#3 楼 @nightire 能给个嵌套的例子么?之前@blackanger 建议我创建一个 model 继承 area 来做自连接,这样的话 restful 确实可以使用

resources :area do
  resources :city
end

但貌似这个不是我想要的结果,唉。

做成目录式怎么样

get 'area/*path', :to => 'areas#show'
class Area
  def to_param
    [parents.map(:slug) + name].join('/')
  end
end
需要 登录 后方可回复, 如果你还没有账号请 注册新账号