2011-06-21 76 views
1

我有一個足智多謀的路線後的路線,用post路線嵌套在:URL幫手在資源

resources :groups, :only => [:index, :show] do 
    post 'send_audit_reminder', :on => :member 
end 

如果我運行rake routes,這條路線顯示出來就好了:

send_audit_reminder_group POST /groups/:id/send_audit_reminder(.:format) 
      {:controller=>"groups", :action=>"send_audit_reminder"} 

但是,我似乎無法弄清楚如何參考給定路線的send_audit_reminder URL。我試過send_audit_reminder_group_path(@group)send_audit_reminder_url(@group),這既給我下面的錯誤:

No route matches {:controller=>"groups", :action=>"send_audit_reminder"} 

正如你可以看到rake routes,的確有這些參數相匹配的路由,並且也有在控制器上的匹配方法。

如何找到此路線的路徑或URL?我不想硬編碼它,因爲我們的應用程序被部署到同一虛擬主機上的子目錄中,所以硬編碼的絕對路徑將不起作用。

我將在哪裏查找有關此文檔或將來的信息?由於這些路徑和URL助手方法是從我的路由生成的,所以我顯然無法查找文檔,並且rake routes告訴我路由在那裏,當我嘗試獲取URL時,它似乎並不存在。

回答

2

可能是因爲缺少佔位符而無法路由。下列代碼應該起作用根據你的定義:

send_audit_reminder_group_path(group) 

你看到像你的路線,你必須提供它們,除非他們是在支架,它聲明他們作爲可選:id:group_id標識符,比如這裏的情況下,任何時間與:format。參數需要按照聲明的順序提供。對於這一點:

/example/:user_id/groups/:id 

這條線路的參數是user_idid兩者必須提供。通常,對於路由,您可以使用字面數字或字符串,或者支持to_param的模型,因爲所有ActiveRecord :: Base派生類都可以。

這一切都源自於與:member聲明,這意味着它是特定於特定記錄,而不是:collection其中省略。 Rails Routing Guide解釋更多。

+0

不,我正在通過該組。我會更新我的問題來澄清這一點。 –

+0

非常棘手,特別是如果定義了「@ group」。您的'routes.rb'中沒有任何內容可能會阻止該部分運行?沒有條件?有時候寫''assert_routing'功能測試是值得的,並驗證你的自定義路由的工作。 – tadman

+0

我的'routes.rb'很簡單,一個'root:to =>重定向(「/ groups」)',一些足智多謀的路線和一個顯示的路線,這些路線被剝奪了一些嵌套的資源,我認爲它們可能不相關,因爲它們沒有名稱衝突的可能性。沒有條件。我會嘗試編寫功能測試;我的測試基礎架構目前似乎已經崩潰,所以我需要在解決這個問題之前先解決這個問題。 –