我有用户和产品型号。用户表有一个“折扣”字段。我试图从用户/索引视图调用方法“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”
请解释我为什么这个表格要求资产。以及如何提出正确的要求。
答案 0 :(得分:1)
在您的网址中包含此内容可能意味着您的表单标记语法不正确,因此我认为您的问题不是路由错误。
?行动= apply_discount&安培;控制器=用户&安培;方法=放
应该看起来像
<%= form_tag(:controller => "foo", :action => "bar", :method => "post" %>
<% end %>
您应该为要在控制器中进行的操作设置路线
查看本指南
答案 1 :(得分:0)
实际上,我发现如果在routes.rb中没有相应的好路由,则会使网址为:
/assets?controller=xxx&action=yyy
如果找到路线,你会得到正确的
/xxx/yyy
(假设xxx是控制器,yyy是你指定的动作)。
因此,如果您要构建一个非REST-ful网址,最好先在路由表中使用它。