试图调用特定方法 - 路由错误

时间:2012-02-12 21:36:52

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

我有用户和产品型号。用户表有一个“折扣”字段。我试图从用户/索引视图调用方法“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”的方法。 我提交表单时遇到的问题是路由错误:

本地主机:3000 /资产行动= apply_discount&安培;控制器=用户&安培;方法=放

没有路线匹配[POST]“/ assets”

请解释我为什么这个表格要求资产。以及如何提出正确的要求。

2 个答案:

答案 0 :(得分:1)

在您的网址中包含此内容可能意味着您的表单标记语法不正确,因此我认为您的问题不是路由错误。

行动= apply_discount&安培;控制器=用户&安培;方法=放

应该看起来像

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

您应该为要在控制器中进行的操作设置路线

查看本指南

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

答案 1 :(得分:0)

实际上,我发现如果在routes.rb中没有相应的好路由,则会使网址为:

/assets?controller=xxx&ampaction=yyy

如果找到路线,你会得到正确的

/xxx/yyy

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

因此,如果您要构建一个非REST-ful网址,最好先在路由表中使用它。