form_tag路由缺少必需的密钥:[:id]

时间:2013-07-30 14:19:05

标签: ruby-on-rails rails-routing

我在订单控制器

中有自定义方法buy

我已声明了一条特殊路线,其中包含以下内容:sell_order_path

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

这是我的表格标签

<%= form_tag(sell_order_path, :params => params.merge(:id => 5, :stock_symbol =>'test')  ) do %>
  <%= label_tag :stock_name, 'Buy Quantity' %>
  <%= text_field_tag :stock_name, params[:quantity] %> 
  <%= submit_tag "Buy", class: "btn" %>
<% end %>

当我点击提交按钮时,它会显示

No route matches {:controller=>"orders", :action=>"sell"} missing required keys: [:id]

知道为什么吗?我需要将总共3个参数传递给我的orders#sell

  1. ID
  2. STOCK_SYMBOL
  3. 数量

1 个答案:

答案 0 :(得分:2)

试试这个:

<%= form_tag(sell_order_path(5)) do %>
  <%= hidden_field_tag :stock_symbol, 'test' %>
  <%= label_tag :stock_name, 'Buy Quantity' %>
  <%= text_field_tag :stock_name, params[:quantity] %> 
  <%= submit_tag "Buy", class: "btn" %>
<% end %>

发生错误是因为如果路由到资源成员操作,您需要将适当的对象ID传递给您的url帮助程序。另外,我将stock_symbol移到了表单中的隐藏字段。