1

此代码在页面呈现期间引发错误,因为它没有找到此链接的路由:

<li class="link">
    <%=link_to "Save current options to a cluster", division_clusters_path(@current_dvision, courses: @cluster_courses ), :method => :post unless @cluster_courses.empty? %>
</li>

它在较旧的 3.2 副本中工作,但在升级到 3.2.4 之后,它开始抛出错误,因为它在仅存在 POST 路由时寻找 GET 路由(它意味着转到标准创建方法)。

我将它从 link_to 切换到 button_to 并尝试从 HTML 选项中明确地散列 URL 选项以防止歧义,但我仍然搞砸了一些事情。

我假设如果 button_to 正在轰炸,我正在做一些非常错误的事情。我只是不确定是什么。

4

1 回答 1

2

它回退到 GET 请求的事实表明它:method => :post没有进入 options 参数:

# File actionpack/lib/action_view/helpers/url_helper.rb, line 231
def link_to(*args, &block)
  if block_given?
    options      = args.first || {}
    html_options = args.second
    link_to(capture(&block), options, html_options)
  else
    name         = args[0]
    options      = args[1] || {}
    html_options = args[2]
    .....  
  end
end

由于unless运算符的优先级大于方法调用,因此division_clusters_path(@current_dvision, courses: @cluster_courses )可能是罪魁祸首。如果返回的东西被 args[1] 吞噬,那么 args[2] 将获得其余的选项(用于 args[1])。顺便说一句,那里似乎有一个错字:@current_dvision

于 2012-08-03T18:42:03.203 回答