注意:我已经阅读了从内到外的路由和关于路由的引擎场博客文章。
我正在建立一个梦幻体育联盟,我有一个联盟模型,它支持七种基本的宁静操作,它们都运行良好。
我添加了以下我的 routes.rb
resources :leagues do
member do
get :invite
post :sendem
end
在文件的后面,我有一个资源:用于基本操作的联盟
当我搜索路线时,我可以看到:
invite_league GET /leagues/:id/invite(.:format) {:action=>"invite", :controller=>"leagues"}
sendem_league POST /leagues/:id/sendem(.:format) {:action=>"sendem", :controller=>"leagues"}
这是我所期望的。我在 League 控制器中有两个函数:“invite”,它创建用于收集电子邮件地址的表单,以及“sendem”,它调用邮件程序来实际发送邀请。
/league/:id/invite 的 get 确实会生成表单。我使用的表单标签如下所示:
<%= form_tag(sendem_league_path, :method => "post") do %>
然而呈现的 HTML 看起来像:
<form accept-charset="UTF-8" action="/leagues/1" class="edit_league" id="edit_league_1" method="post">
因此在提交时会生成一个完全错误的 PUT。(它应该发布到 sendem 函数。)我对路由文件的更改出现在通用资源 :leagues 行上方,因此它应该具有更高的优先级。
我确定我错过了一些非常简单的东西,但我没有想法。(和头发)。