【问题标题】:form_tag routing missing required keys: [:id]form_tag 路由缺少必需的键:[:id]
【发布时间】:2013-07-30 14:19:04
【问题描述】:

我在订单控制器中有一个自定义方法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. 身份证
  2. stock_symbol
  3. 数量

【问题讨论】:

    标签: ruby-on-rails rails-routing


    【解决方案1】:

    试试这个:

    <%= 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 移至表单内的隐藏字段。

    【讨论】:

    • @SteveNg 你应该使用 rails Logger class 或 gem pry (通过添加 binding.pry 来使用它来阻止脚本执行并将其“重定向”到控制台)调试 Rails 应用程序。如果有帮助,您介意接受答案吗?
    猜你喜欢
    • 1970-01-01
    • 2014-03-09
    • 2017-07-22
    • 1970-01-01
    • 2021-11-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多