Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ruby-on-rails-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 3 Rails 3中的基本嵌套路由_Ruby On Rails 3_Rails Routing - Fatal编程技术网

Ruby on rails 3 Rails 3中的基本嵌套路由

Ruby on rails 3 Rails 3中的基本嵌套路由,ruby-on-rails-3,rails-routing,Ruby On Rails 3,Rails Routing,注意:我已经从里到外阅读了路由和Engine Yard关于路由的博客文章 我正在建立一个梦幻运动联盟,我有一个支持七个基本restful操作的联盟模型,它们都很好地工作 我已经添加了以下我的路线。rb resources :leagues do member do get :invite post :sendem end 在文件的后面,我有一个参考资料:基本行动联盟 当我搜索路线时,我可以看到: invite_league GET /leagu

注意:我已经从里到外阅读了路由和Engine Yard关于路由的博客文章

我正在建立一个梦幻运动联盟,我有一个支持七个基本restful操作的联盟模型,它们都很好地工作

我已经添加了以下我的路线。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"}
这正是我所期望的。我在联盟控制器中有两个功能:invite,它创建用于收集电子邮件地址的表单;sendem,它调用一个邮件程序来实际发送邀请

get for/league/:id/invite确实生成了表单。 我正在使用的表单标记如下所示:

<%= form_tag(sendem_league_path, :method => "post") do %>
<form accept-charset="UTF-8" action="/leagues/1" class="edit_league" id="edit_league_1" method="post">
但是呈现的HTML看起来像:

<%= form_tag(sendem_league_path, :method => "post") do %>
<form accept-charset="UTF-8" action="/leagues/1" class="edit_league" id="edit_league_1" method="post">
因此,在提交时生成的看跌期权是完全错误的。它应该发布到sendem函数。我对routes文件的更改显示在generic resources:leagues行的上方,因此它应该具有更高的优先级


我肯定我错过了一些非常简单的东西,但我已经没有主意了。和头发。

您不应该使用form\u标记来操纵资源。 您应该使用表单_。
检查-第2节处理模型对象。它负责推断对模型对象使用POST还是PUT。例如,如果您的模型对象是新的,它将使用资源的URL上的post。如果它已经是现有的数据库实体,它将使用PUT到该资源的URL。

ARGH@league顶部表单的一些表单处理错误代码在页面上创建了第二个表单进行编辑。。。。为了简洁起见,上面的代码片段被省略了。原始代码似乎和预期的一样工作,而其他代码被注释掉了。感谢Vladdruz让我相信我走上了正确的道路,感谢Salil让我从上到下阅读呈现的HTML

Try:method=>:post并删除括号。没有区别MurifoX:为什么没有像这样的表单\u tagsendem\u league\u pathleague.id。。。。我的意思是,你的路线需要一个参数。我已经有了这个资源的CRUD函数——这些是额外的函数,最多只能从模型的属性中读取,没有写入、创建或更新任何内容。我也尝试过将这些函数移动到一个单独的控制器中的方法,但这种方法也不起作用。这个问题得到了回答吗?如果是,请发布解决方案代码并接受答案。