form_tag没有路由匹配[POST]

时间:2013-07-31 01:55:23

标签: ruby-on-rails

我有自定义方法购买内部订单控制器

我已经使用以下内容声明了一条特殊路线:即sell_order_path

resources :orders do
  post 'buy', on: :member
end

这是我的表格标签

<%= form_tag(buy_order_path(@symbol)) do %>
<%= hidden_field_tag :stock_price, '55' %>
<%= label_tag :stock_quantity, 'Buy Quantity' %>
<%= text_field_tag :stock_quantity, params[:stock_quantity] %> 
<%= submit_tag "Buy", class: "btn" %>
<% end %>

然而,当我点击提交时,它表示没有路由匹配[POST]“/orders/CC3.SI/buy”

当我使用

时它起作用
<%= form_tag(buy_order_path('5')) do %> 

但是,我需要一个动态的。知道怎么样?我有一种感觉,就是我如何创造这条路线。

顺便说一句@symbol现在只是一个变量,而不是一个对象

1 个答案:

答案 0 :(得分:0)

这就是我做的事情

而不是

resource :order do
  post :buy, on: :member
end

将生成

的路线
/orders/:id/buy(.:format)

我将路线改为

resource :order do
  post :buy, on: :collection
end

将生成

的路线
/orders/buy(.:format)

接下来,我将symbol参数插入到我的form_tag

<%= form_tag(buy_order_path()) do %>
<%= hidden_field_tag :symbol, @symbol %>
<%= hidden_field_tag :stock_price, '55' %>
<%= label_tag :stock_quantity, 'Buy Quantity' %>
<%= text_field_tag :stock_quantity, params[:stock_quantity] %> 
<%= submit_tag "Buy", class: "btn" %>
<% end %>

以上工作,但我不确定这是否是最好的方式,因为用户可能会看到隐藏的字段标记并编辑html值。是否有更好的方法将值传递给控制器​​?