Rails向后路由我的calendar_event_path?

Ken*_*ker 3 ruby routing ruby-on-rails ruby-on-rails-3

Rails给我的网址有错误的ID.它将父ID传递给子,将子ID传递给父.

在我的routes.rb我有

resources :calendars do
  resources :events
end
Run Code Online (Sandbox Code Playgroud)

rake routes告诉我正在建立良好的路线,例如

calendar_event GET    /calendars/:calendar_id/events/:id(.:format)      {:controller=>"events", :action=>"show"}
Run Code Online (Sandbox Code Playgroud)

所以当我从我的视角中询问该路线的路径时,

<%= link_to "#{event.name} @ #{event.calendar.name} #{event.calendar.year}", calendar_event_path(event) %>
Run Code Online (Sandbox Code Playgroud)

它给了我一个ids反转的网址...

http://localhost:3000/calendars/<-eventid->/events/<-calendarid->
Run Code Online (Sandbox Code Playgroud)

任何帮助,将不胜感激!!!

编辑:在我的模型中,事件belongs_to :calendar和日历has_many :events.我也使用Mongoid作为我的ORM,而不是ActiveRecord,但我希望这不是问题.

Jit*_*its 6

当您使用嵌套资源的URL帮助程序时,calendar_event_path您还需要为它提供calendar对象(或ID),例如:

 calendar_event_path(event.calendar, event)
Run Code Online (Sandbox Code Playgroud)

另一种选择是:

 <%= link_to "#{event.name} @ #{event.calendar.name} #{event.calendar.year}", [event.calendar, event] %>
Run Code Online (Sandbox Code Playgroud)