Nested Resources for multi-belongs_to

这样一个模型关系,暂把它定义成multi-belongs_to:
Project has_many :tasks
User has_many :tasks
Task belongs_to :project, :user


想用Rails1.2的Nested Resources实现效果
projects/1/tasks
users/1/tasks

但似乎Task资源只能嵌套在一个父资源里面,routes设置:
map.resources :projects do |project|
  project.resources :tasks 
end

这样的话,只能做到这样:
tasks_url(1)  # => /projects/1/tasks

tasks_url不能再解析成另一个url出来。


花了点儿时间,找出来这种做法:
map.resources :users do |user|
  user.resources :tasks, :name_prefix => "user_"
end

map.resources :projects do |project|
  project.resources :tasks, :name_prefix => "project_"
end

特别需要注意的是以上代码应该放在routes.rb设置的开头,否则会碰到"Unknown Action n"的Exception。因为routing设置是有优先级的。

就可以实现我要的东西了:
project_tasks_url(1)  # => /projects/1/tasks
user_tasks_url(1)  # => /users/1/tasks

你可能感兴趣的:(Ruby)