我如何创建以下路线

时间:2014-01-13 15:08:46

标签: ruby-on-rails

Rails初学者,所以请不要咬人。我已经接管了应用程序的维护/开发,但仍在学习绳索

我想生成以下路线:

  

/ events / 1 / Project / 2 / Pledge

其中1是eventId,2是Project Id

我有一个项目控制器和事件控制器。承诺行动在项目控制器上

编辑:回答@ wacko的评论。

a)忽略我所要求的网址和复数(我意识到原来的问题有点无效......)

一个事件有多个项目,承诺行动将把用户带到一个页面,在那里他们可以输入特定项目的多个承诺。

也许Pledge行动应该在事件控制器上呢?

和' events / 1 / pledge / 2' (其中2是projectId)

5 个答案:

答案 0 :(得分:2)

您要查找的内容称为嵌套资源,也就是说两个资源之间存在父子关系。

resource :events do
  resource :projects do
    get :pledge, :on => :member
  end
end

为此,您的模型看起来像这样

class Event < ActiveRecord::Base
  has_many :projects
end

class Project < ActiveRecord::Base
  belongs_to :event
end

答案 1 :(得分:1)

以下内容应该有效

get '/events/:event_id/projects/:id/pledge' => 'projects#pledge'

在您的控制器操作中,您可以将params哈希中的event_id和project_id分别设为params[:event_id]params[:id]

答案 2 :(得分:1)

resources :events do
  resources :projects do
    member do
      get :pledge
    end
  end
end

您可以将get更改为所需的http方法。 如果您需要collections

等路线,可以使用/events/1/projects/pledge
collection do
  get :pledge
end

从项目根文件夹运行rake routes以查看生成的路由列表

答案 3 :(得分:1)

resources :events do
  resource :projects do
    resources :pledge
  end
end

这将使您能够在控制器中设置范围并可以访问所有7个REST动词

答案 4 :(得分:1)

jsut使用这种方式

resources :events do
 resource :projects do
   get '/pledge'
 end
end