嵌套路由routes.rb

时间:2012-02-08 11:41:35

标签: ruby-on-rails ruby nested

我一遍又一遍地阅读有关路线的主题,但没有一个可以帮助我。所以,因为我还是Ruby的新手,我的尝试:

我希望用户拥有自己的项目。这些项目将拥有仓库,客户和transquans。我希望URL类似〜/ user / 1234 / project / 1 / warehouse / ...,以便授予独占使用权。这就是我的routes.rb的样子:

resources :users do
  resources :projects do
    resources :transquans
    resources :warehouses
    resources :clients
  end
end

这是我尝试从users / show.html.erb调用项目的方法[已经尝试了不同的变体,这些变体都给了我错误信息]

<strong>Projects</strong> <%= link_to project_path(@user) %>

尝试呼叫给定用户会给我一些消息,例如

No route matches {:action=>"show", :controller=>"projects", :id=>#<User id: 64810937, name: "Tester 1", email....

也就是说,虽然我通过脚手架创建了项目,但从未接触过“show”动作......

试图弄清楚如何解决这个问题花费了我几天,而我认为解决方案不会那么难。

编辑:我现在已经按照Ryan Bates'Screencast的前几个步骤,直到4:52分钟。然而,当击中     http://localhost:3000/users/768773789/projects

我收到另一条我不理解的错误消息,说

SQLite3::SQLException: no such column: projects.user_id: SELECT "projects".* FROM     "projects" WHERE ("projects".user_id = 768773789)

而schema.rb看起来像这样

create_table "clients", :force => true do |t|
  t.string   "name"
  t.string   "codename"
  t.integer  "demand"
  t.datetime "created_at"
  t.datetime "updated_at"
end

create_table "projects", :force => true do |t|
  t.string   "name"
  t.datetime "created_at"
  t.datetime "updated_at"
end

仍然感谢任何帮助。这让我很生气。

2 个答案:

答案 0 :(得分:0)

project_path辅助方法仅适用于具有GET /project/id等路线的“顶级”项目。它不会完全失败,因为实体Project确实存在。它只告诉你没有路由匹配,这在这样的情况下会产生误导。

您需要user_projects_path辅助方法,类似于magazine_ads_url here

答案 1 :(得分:0)

查看rake routes的输出,它应该告诉你需要知道什么。