【发布时间】:2016-02-13 20:47:07
【问题描述】:
我正在构建一个订单管理系统。我最近发布了一个关于向客户添加订单的问题。看来我已经修复了 99%。如果我查看我的终端,它首先会找到当前的客户 ID,然后创建一个新订单。结果如下。
Customer Load (0.2ms) SELECT "customers".* FROM "customers" WHERE "customers"."id" = ? LIMIT 1 [["id", 111]]
(0.1ms) begin transaction
SQL (0.4ms) INSERT INTO "orders" ("customer_id", "created_at", "updated_at") VALUES (?, ?, ?) [["customer_id", 111], ["created_at", "2015-11-12 13:28:21.185604"], ["updated_at", "2015-11-12 13:28:21.185604"]]
(8.2ms) commit transaction
但问题是,它没有添加参数。我故意这样做只是为了检查我的语法是否会执行以下 sql 语句。但是,一旦我添加了参数,我就会收到一个常见错误“参数丢失或值为空:订单”
这是我的代码:
控制器
def createorders
@customer = Customer.find(params[:id]) #find current id??
#current_user = Order.find(params[:id])
@orders = @customer.orders.new(order_params)
if @orders.save
flash[:notice] = "Subject created successfully"
redirect_to(:action => 'index')
else
#If save fails, redisplay the form so user can fix problems
render('new') #het zit in de new.html template
end
end
private
def order_params
#same as using "params[:subject]", expect that it:
# - raises an error if :subject is not present
# - allows listed attributes to be mass-assigned
params.require(:order).permit(:pakket, :verstuurt)
end
end
查看
<%= link_to("<< Back to List", {:action => 'index'}, :class => 'back-link') %>
<div class="subject new">
<h2>Create Subject</h2>
<%= form_for(:order, :url=> {:action => 'createorders'}) do |f| %>
<table summary="subject form fields">
<tr>
<th>pakket</th>
<td><%= f.text_field(:pakket) %></td>
</tr>
<tr>
<th>verstuurt</th>
<td><%= f.text_field(:verstuurt) %></td>
</tr>
</table>
<div class="form-buttons">
<%= submit_tag("Create Subject") %>
</div>
<% end %>
</div>
错误信息
OrderController#createorders 中的 ActionController::ParameterMissing 参数缺失或值为空:order
Extracted source (around line #107): 105 106 107 108 109 110 def order_params params.require(:order).permit(:pakket, :verstuurt) end end
服务器端日志
于 2015 年 11 月 13 日开始为 ::1 获取“/order/createorders?id=111” 11:58:30 +0100 由 OrderController#createorders 处理为 HTML
参数:{"id"=>"111"} 客户负载 (0.2ms) SELECT "客户".* FROM "客户" WHERE "客户"."id" = ?限制 1 [["id", 111]] 5ms 完成 400 Bad Request (ActiveRecord: 0.2ms)ActionController::ParameterMissing (param is missing or the value is empty: order): app/controllers/order_controller.rb:107:in
order_params' app/controllers/order_controller.rb:44:increateorders'Rendered /Users/cecil/.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/gems/actionpack-4.2.4/lib/action_dispatch/middleware/templates/rescues/_source.erb(8.3ms) 渲染 /Users/cecil/.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/gems/actionpack-4.2.4/lib/action_dispatch/middleware/templates/rescues/_trace.html.erb (2.6ms ) 渲染 /Users/cecil/.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/gems/actionpack-4.2.4/lib/action_dispatch/middleware/templates/rescues/_request_and_response.html.erb (1.3ms) 渲染 /Users/cecil/.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/gems/actionpack-4.2.4/lib/action_dispatch/middleware/templates/rescues/diagnostics.html.erb 在救援/布局(68.2ms)内渲染 /Users/cecil/.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/gems/web-console-2.2.1/lib/web_console/templates/_markup.html.erb (0.4ms) 渲染 /Users/cecil/.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/gems/web-console-2.2.1/lib/web_console/templates/_inner_console_markup.html.erb 在 layouts/inlined_string (0.4ms) 内渲染 /Users/cecil/.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/gems/web-console-2.2.1/lib/web_console/templates/_prompt_box_markup.html.erb 在 layouts/inlined_string (0.4ms) 内渲染 /Users/cecil/.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/gems/web-console-2.2.1/lib/web_console/templates/style.css.erb 在 layouts/inlined_string (0.4ms) 内渲染 /Users/cecil/.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/gems/web-console-2.2.1/lib/web_console/templates/console.js.erb 在 layouts/javascript (60.3ms) 内渲染 /Users/cecil/.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/gems/web-console-2.2.1/lib/web_console/templates/main.js.erb 在 layouts/javascript (0.3ms) 内渲染 /Users/cecil/.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/gems/web-console-2.2.1/lib/web_console/templates/error_page.js.erb 在 layouts/javascript ( 0.5ms) 渲染 /Users/cecil/.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/gems/web-console-2.2.1/lib/web_console/templates/index.html.erb (124.2 毫秒)
感谢 stackoverflow 对我的支持。我是红宝石的新手,我知道我犯了菜鸟错误。所以欢迎指出缺陷!
【问题讨论】:
-
您的
order_params方法定义在哪里? -
是的,您正在显示
customer_params,但您正在呼叫order_params。order_params在哪里? -
@sunnK,我粘贴了错误的参数。我现在粘贴了正确的
-
您能否添加显示正在发送到
createorders操作的参数的日志? -
@basia 是的!做到了。
标签: ruby-on-rails ruby-on-rails-3 activerecord associations