2

我有用户和产品模型。用户的表具有“折扣”字段。我试图从用户/索引视图调用方法“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] “/资产”

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

回答

1

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

?行动= apply_discount &控制器=用户&方法=把

应该是这个样子

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

你应该有一个路径设置为你想要去的控制器

行动

查看本指南

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

+0

D'oh!我忘了路线;因此,在routes.rb中“post”users/apply_discount'“解决了我的问题。仍然想知道为什么这个表单试图请求资产。谢谢! – user1201917 2012-02-13 06:51:59

+0

你可以发布你的所有代码吗? – 2012-02-13 21:03:41

0

事实上,我发现,如果没有在routes.rb中相应的很好的途径,它使网址是:

/assets?controller=xxx&ampaction=yyy 

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

/xxx/yyy 

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

所以,如果你正在建立一个非REST-ful URL,你最好先在路由表中找到它。