rails 3.2.4+中post方法的链接/按钮格式

时间:2012-08-03 16:11:33

标签: ruby-on-rails

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

<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是轰炸,我正在做一些令人难以置信的错误。我只是不确定是什么。

1 个答案:

答案 0 :(得分: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