奇怪的Rails路由行为:在嵌套资源中交换两个ID

我在我的应用程序中设置了以下路由(表单属于某个站点):

map.resources :sites do |site| site.resources :forms end 

但是,当我尝试使用帮助程序(例如,使用帮助程序)进入编辑(或类似)的路径时

 edit_site_form_path(form) 

要么

  

我的url是ID交换过的(/ sites / 5 / forms / 1),其中5是表单ID,1是网站ID。 这是来自page / sites / 1。

救命(?)

edit_site_form_path方法必须有两个参数,即site_id和form_id。 所以在你的例子中,你只传递form_id。 第一个参数是模型在方法中首先出现的,在这种情况下它是site 。 第二个参数是form_id。

改进的路径方法可能如下所示

  edit_site_form_path(form.site, form) 

(假设你有一个belongs_to :site的模型Form