【问题标题】:Trying to call for a specific method - routing error尝试调用特定方法 - 路由错误
【发布时间】:2012-03-04 09:44:55
【问题描述】:

我有用户和产品模型。用户表有一个“折扣”字段。我试图从用户/索引视图中调用方法“apply_discount”,它将所有价格相乘并给出折扣。 用户/index.html.haml:

- @users.each do |user|
# user data
  = form_tag(action:'apply_discount', method: :put) do 
    = number_field_tag :discount
    = submit_tag

UsersController 有一个名为“apply_discount”的方法。 我的问题是提交表单时出现路由错误:

localhost:3000/assets?action=apply_discount&controller=users&method=put

没有路线匹配 [POST] "/assets"

请解释一下为什么这个表单需要资产。以及如何提出正确的要求。

【问题讨论】:

    标签: ruby-on-rails model-view-controller ruby-on-rails-3.1 routing actionview


    【解决方案1】:

    其实我已经发现,如果routes.rb中没有对应的好路由,就使得url为:

    /assets?controller=xxx&ampaction=yyy
    

    如果它找到你得到正确的路线

    /xxx/yyy
    

    (假设 xxx 是控制器,yyy 是您指定的操作)。

    因此,如果您正在构建一个非 REST-ful url,您最好先将它放在路由表中。

    【讨论】:

      【解决方案2】:

      在你的 url 中有这个可能意味着你的表单标签有一些不正确的语法,所以我不认为你的问题是路由错误。

      ?action=apply_discount&controller=users&method=put

      应该看起来像

      <%= form_tag(:controller => "foo", :action => "bar", :method => "post" %>
      <% end %>
      

      您应该为您想要在控制器中执行的操作设置路由

      查看本指南

      http://guides.rubyonrails.org/form_helpers.html

      【讨论】:

      • 天啊!我忘记了路线;所以在 routes.rb 中“发布'users/apply_discount'”解决了我的问题。仍然想知道为什么这个表单试图请求资产。谢谢!
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-09-09
      • 2010-11-21
      • 2021-09-12
      • 2018-10-23
      • 2019-01-06
      • 2015-06-15
      相关资源
      最近更新 更多