简单的Rails路由问题

时间:2013-12-10 06:35:45

标签: ruby-on-rails

我有

resources :calendars do

   resources :blocked_times

end

什么是生成/calendar/:calendar_id/blocked_times的辅助方法?

我试过了calendar_blocked_time_path(@calendar.id),但这给了我:

/calendar/:calendar_id/blocked_times/:blocked_time_id

并且:blocked_time_id默认为1。

2 个答案:

答案 0 :(得分:3)

由于您有一个嵌套路线,因此您需要多个calendar_blocked_time_path参数才能路由到正确的BlockTime

calendar_block_time_path(@calendar, @blocked_time)

如果您希望获得index的{​​{1}}操作,请使用以下路径,仅传递 BlockTimesController Calendar:< / p>

id

请注意,由于您正在尝试访问复数资源(在这种情况下为块时间),因此您需要调用资源的复数形式 - 即calendar_block_times_path(@calendar)

请记住,您始终可以从命令行运行calendar_block_times以获取完整的路由主机及其相应路径。这是您案例中的输出:

rake routes

您会注意到,日历块时间的正确路径为 calendar_blocked_times GET /calendars/:calendar_id/blocked_times(.:format) blocked_times#index POST /calendars/:calendar_id/blocked_times(.:format) blocked_times#create new_calendar_blocked_time GET /calendars/:calendar_id/blocked_times/new(.:format) blocked_times#new edit_calendar_blocked_time GET /calendars/:calendar_id/blocked_times/:id/edit(.:format) blocked_times#edit calendar_blocked_time GET /calendars/:calendar_id/blocked_times/:id(.:format) blocked_times#show PUT /calendars/:calendar_id/blocked_times/:id(.:format) blocked_times#update DELETE /calendars/:calendar_id/blocked_times/:id(.:format) blocked_times#destroy calendars GET /calendars(.:format) calendars#index POST /calendars(.:format) calendars#create new_calendar GET /calendars/new(.:format) calendars#new edit_calendar GET /calendars/:id/edit(.:format) calendars#edit calendar GET /calendars/:id(.:format) calendars#show PUT /calendars/:id(.:format) calendars#update DELETE /calendars/:id(.:format) calendars#destroy 。传递给/calendars/:calendar_id/blocked_times/:id的第一个参数是calendar_block_time_path,传递的第二个参数是:calendar_id - 也就是:id的{​​{1}}。

答案 1 :(得分:2)

使用这些路线运行rake routes,您将获得路线名称的输出。

虽然我认为在这种情况下你正在寻找:

calendar_blocked_times_path(@calendar)

我没有对此进行过测试,但基本上对于索引操作,你想要第二个资源的复数。