Ruby on rails 集合中的第一个项目没有';t提交行动[已编辑]
我有两个控制器,它们修改一个大视图(carts/new.html.erb)。此视图呈现order_item/new.html.erb,作为搜索结果传递@products的每个产品。此函数工作正常。但是,当我单击为每个产品创建的表单的submit按钮时,这不起作用(仅适用于第一个产品),对于其他产品,它可以正常工作。因此,我看到生成的html,第一个表单标记没有生成 缺少标签Ruby on rails 集合中的第一个项目没有';t提交行动[已编辑],ruby-on-rails,ajax,Ruby On Rails,Ajax,我有两个控制器,它们修改一个大视图(carts/new.html.erb)。此视图呈现order_item/new.html.erb,作为搜索结果传递@products的每个产品。此函数工作正常。但是,当我单击为每个产品创建的表单的submit按钮时,这不起作用(仅适用于第一个产品),对于其他产品,它可以正常工作。因此,我看到生成的html,第一个表单标记没有生成 缺少标签 <form accept-charset="UTF-8" action="/order_items" class="
<form accept-charset="UTF-8" action="/order_items" class="new_order_item" data-remote="true" id="new_order_item" method="post"></form>
单击其他产品时记录
Started POST "/order_items" for 127.0.0.1 at 2015-03-10 02:21:22 -0300
Processing by OrderItemsController#create as HTML
Parameters: {"utf8"=>"✓", "authenticity_token"=>"7pM8PRU8Uy4euEtSv/GZyHjRPewdIiAzXDp5xQnd9u0=", "order_item"=>{"quantity"=>"7", "product_id"=>"3"}, "commit"=>"Agregar a la orden"}
[1m[36mUser Load (0.6ms)[0m [1mSELECT "users".* FROM "users" WHERE "users"."remember_token" = 'DUoiwJ5FkXlFIXty3UE8xA' LIMIT 1[0m
[1m[35mOrder Load (8.8ms)[0m SELECT "orders".* FROM "orders" WHERE "orders"."id" = ? LIMIT 1 [["id", 34]]
[1m[36m (0.3ms)[0m [1mbegin transaction[0m
[1m[35mProduct Load (0.4ms)[0m SELECT "products".* FROM "products" WHERE "products"."id" = 3 LIMIT 1
[1m[36mSQL (4.0ms)[0m [1mINSERT INTO "order_items" ("created_at", "order_id", "product_id", "quantity", "updated_at") VALUES (?, ?, ?, ?, ?)[0m [["created_at", Tue, 10 Mar 2015 05:21:23 UTC +00:00], ["order_id", 34], ["product_id", 3], ["quantity", 7], ["updated_at", Tue, 10 Mar 2015 05:21:23 UTC +00:00]]
[1m[35m (71.2ms)[0m commit transaction
Redirected to http://localhost:3000/orders
Completed 302 Found in 378ms (ActiveRecord: 95.0ms)
Started GET "/orders" for 127.0.0.1 at 2015-03-10 02:21:23 -0300
Processing by CartsController#new as HTML
[1m[36mUser Load (0.8ms)[0m [1mSELECT "users".* FROM "users" WHERE "users"."remember_token" = 'DUoiwJ5FkXlFIXty3UE8xA' LIMIT 1[0m
[1m[35mOrder Load (0.4ms)[0m SELECT "orders".* FROM "orders" WHERE "orders"."id" = ? LIMIT 1 [["id", 34]]
[1m[36mProduct Load (0.6ms)[0m [1mSELECT "products".* FROM "products" LIMIT 5 OFFSET 0[0m
Rendered order_items/new.html.erb (8.6ms)
Rendered order_items/new.html.erb (3.9ms)
Rendered order_items/new.html.erb (3.6ms)
[1m[35m (0.6ms)[0m SELECT COUNT(*) FROM "order_items" WHERE "order_items"."order_id" = 34
[1m[36mOrderItem Load (0.4ms)[0m [1mSELECT "order_items".* FROM "order_items" WHERE "order_items"."order_id" = 34[0m
[1m[35mProduct Load (0.6ms)[0m SELECT "products".* FROM "products" WHERE "products"."id" = 3 LIMIT 1
Rendered carts/_cart_row.html.erb (6.8ms)
Rendered carts/_shopping_cart.html.erb (20.4ms)
Rendered carts/new.html.erb within layouts/application (74.1ms)
Rendered layouts/_header.html.erb (6.9ms)
Rendered layouts/_footer.html.erb (1.2ms)
Completed 200 OK in 378ms (Views: 366.0ms | ActiveRecord: 3.4ms)
您的日志显示了两个非常不同的操作。打破一个与提交您的订单项目表单无关-它与创建一个新购物车有关
CartsController#new
它正在崩溃,因为您尚未将product
作为变量传递到Carts/new.js.erb中-订单项目控制器如何运行到Carts控制器?好的,我能做什么?我不明白这在其他产品中是如何工作的。问题(在日志中很清楚)是在CartsController#new
操作中没有设置名为product
的变量,但模板app/views/carts/new.js.erb
(将由该操作呈现)显然,我们希望有一个产品
变量。我不知道你希望这个行动何时以何种方式进行。。。但这是你的问题-现在你必须弄清楚是否需要设置该变量,或者更改模板以执行其他操作。我知道new.js.erb并不是什么都不做。所以我删除了那个文件。现在,当我单击第一个产品时,日志只显示没有错误的第二个操作:Started GET“/orders?utf8=%E2%9C%93&search=&utf8=%E2%9C%93&authenticity\u-token=7pM8PRU8Uy4euEtSv%2fgzyhjrpewdiiazxdp5xnd9u0%3D&order\u-item%5Bquantity%5D=3&order\u-item%5Bproduct%5Bproduct\id%5D=2&commit=Agregar+a+la+orden”对于2015-03-10 02:19:29-0300时的127.0.0.1,CartsController的处理(新为HTML1)注释中的代码格式非常糟糕=请将所有代码放入原始问题2),这看起来只是stacktrace的起始行。。。其余的也很重要。
<% @products.each do |product| %>
<%= render template: "order_items/new", :locals => { :product => product } %>
<% end %>
<%= form_for OrderItem.new, :url => { :action => "create",:controller=>"order_items" }, method: :post, remote: true do |f| %>
<tr>
<td><%= product.code %></td>
<td><%= product.name %></td>
<td><%= product.buy_price %></td>
<td><%= product.sell_price %></td>
<td><%= f.number_field :quantity, class: "form-control width: 50%", min: 0 %></td>
<%= f.hidden_field :product_id, value: product.id %>
<td><%= f.submit "Agregar a la orden", class: "btn btn-primary" %></td>
</tr>
<% end %>
$("#shopping_cart").html("<%=escape_javascript(render partial: 'carts/shopping_cart', locals: { order_items: @order_items, order: @order } ) %>");
class OrderItemsController < ApplicationController
before_filter :signed_in_user
def new
@order = current_order
@order_item = @order.order_items.new
end
def create
@order = current_order
@order_item = @order.order_items.new(order_item_params)
respond_to do |format|
if @order.save
format.html {redirect_to orders_path, notice: "Item ingresado"}
format.js {}
session[:order_id] = @order.id
#format.json { render json: @order, status: :created, location: @order }
else
format.html { redirect_to orders_path, notice: "Error #{@order.errors}" }
#format.json { render json: @order.errors, status: :unprocessable_entity }
end
end
end
def update
@order = current_order
@order_item = @order.order_items.find(params[:id])
@order_item.update_attributes(order_item_params)
@order_items = @order.order_items
respond_to do |format|
if @order.save
format.html {redirect_to orders_path, notice: "Item modificado"}
format.js {}
#format.json { render json: @order, status: :created, location: @order }
else
format.html { redirect_to orders_path, notice: "Error #{@order.errors}" }
#format.json { render json: @order.errors, status: :unprocessable_entity }
end
end
end
def destroy
@order = current_order
@order_item = @order.order_items.find(params[:id])
@order_item.destroy
@order_items = @order.order_items
end
private
def order_item_params
params.require(:order_item).permit(:quantity, :product_id)
end
def signed_in_user
unless signed_in?
store_location
redirect_to signin_path, notice: "Por favor, ingrese sus credenciales"
end
end
end
class CartsController < ApplicationController
before_filter :signed_in_user
def new
@products = Product.search(params[:search]).paginate(:per_page => 5, :page => params[:page])
@order_items=current_order.order_items
end
private
def signed_in_user
unless signed_in?
store_location
redirect_to signin_path, notice: "Por favor, ingrese sus credenciales"
end
end
end
Started GET "/orders?utf8=%E2%9C%93&search=&utf8=%E2%9C%93&authenticity_token=5DtAkn%2F7Ec2pjlbRH7ndQhmBVvY3l3FaFtxVxyalZSQ%3D&order_item%5Bquantity%5D=2&order_item%5Bproduct_id%5D=1&commit=Agregar+a+la+orden" for 127.0.0.1 at 2015-03-15 23:32:52 -0300
Processing by CartsController#new as HTML
Parameters: {"utf8"=>"✓", "search"=>"", "authenticity_token"=>"5DtAkn/7Ec2pjlbRH7ndQhmBVvY3l3FaFtxVxyalZSQ=", "order_item"=>{"quantity"=>"2", "product_id"=>"1"}, "commit"=>"Agregar a la orden"}
[1m[36mUser Load (0.3ms)[0m [1mSELECT "users".* FROM "users" WHERE "users"."remember_token" = 'fyF-zqLjJHV7xzC3nnVdPQ' LIMIT 1[0m
[1m[35mOrder Load (8.3ms)[0m SELECT "orders".* FROM "orders" WHERE "orders"."id" = ? LIMIT 1 [["id", 63]]
[1m[36mCACHE (0.0ms)[0m [1mSELECT "orders".* FROM "orders" WHERE "orders"."id" = ? LIMIT 1[0m [["id", 63]]
[1m[35mProduct Load (0.7ms)[0m SELECT "products".* FROM "products" WHERE (name LIKE '%%') LIMIT 5 OFFSET 0
[1m[36m (0.7ms)[0m [1mSELECT COUNT(*) FROM "products" WHERE (name LIKE '%%')[0m
Rendered order_items/new.html.erb (46.4ms)
Rendered order_items/new.html.erb (4.4ms)
Rendered order_items/new.html.erb (2.7ms)
Rendered order_items/new.html.erb (2.6ms)
Rendered order_items/new.html.erb (3.5ms)
[1m[35m (0.4ms)[0m SELECT COUNT(*) FROM "order_items" WHERE "order_items"."order_id" = 63
[1m[36mOrderItem Load (0.4ms)[0m [1mSELECT "order_items".* FROM "order_items" WHERE "order_items"."order_id" = 63[0m
[1m[35mProduct Load (0.4ms)[0m SELECT "products".* FROM "products" WHERE "products"."id" = 2 LIMIT 1
Rendered carts/_cart_row.html.erb (8.4ms)
[1m[36mProduct Load (0.5ms)[0m [1mSELECT "products".* FROM "products" WHERE "products"."id" = 5 LIMIT 1[0m
Rendered carts/_cart_row.html.erb (5.8ms)
[1m[35mCACHE (0.0ms)[0m SELECT "order_items".* FROM "order_items" WHERE "order_items"."order_id" = 63
[1m[36mCACHE (0.0ms)[0m [1mSELECT "products".* FROM "products" WHERE "products"."id" = 2 LIMIT 1[0m
[1m[35mCACHE (0.0ms)[0m SELECT "products".* FROM "products" WHERE "products"."id" = 5 LIMIT 1
Rendered carts/_shopping_cart.html.erb (65.0ms)
Rendered carts/new.html.erb within layouts/application (184.3ms)
Rendered layouts/_header.html.erb (6.9ms)
Rendered layouts/_footer.html.erb (0.6ms)
Completed 200 OK in 792ms (Views: 590.6ms | ActiveRecord: 22.3ms)
Started POST "/order_items" for 127.0.0.1 at 2015-03-10 02:21:22 -0300
Processing by OrderItemsController#create as HTML
Parameters: {"utf8"=>"✓", "authenticity_token"=>"7pM8PRU8Uy4euEtSv/GZyHjRPewdIiAzXDp5xQnd9u0=", "order_item"=>{"quantity"=>"7", "product_id"=>"3"}, "commit"=>"Agregar a la orden"}
[1m[36mUser Load (0.6ms)[0m [1mSELECT "users".* FROM "users" WHERE "users"."remember_token" = 'DUoiwJ5FkXlFIXty3UE8xA' LIMIT 1[0m
[1m[35mOrder Load (8.8ms)[0m SELECT "orders".* FROM "orders" WHERE "orders"."id" = ? LIMIT 1 [["id", 34]]
[1m[36m (0.3ms)[0m [1mbegin transaction[0m
[1m[35mProduct Load (0.4ms)[0m SELECT "products".* FROM "products" WHERE "products"."id" = 3 LIMIT 1
[1m[36mSQL (4.0ms)[0m [1mINSERT INTO "order_items" ("created_at", "order_id", "product_id", "quantity", "updated_at") VALUES (?, ?, ?, ?, ?)[0m [["created_at", Tue, 10 Mar 2015 05:21:23 UTC +00:00], ["order_id", 34], ["product_id", 3], ["quantity", 7], ["updated_at", Tue, 10 Mar 2015 05:21:23 UTC +00:00]]
[1m[35m (71.2ms)[0m commit transaction
Redirected to http://localhost:3000/orders
Completed 302 Found in 378ms (ActiveRecord: 95.0ms)
Started GET "/orders" for 127.0.0.1 at 2015-03-10 02:21:23 -0300
Processing by CartsController#new as HTML
[1m[36mUser Load (0.8ms)[0m [1mSELECT "users".* FROM "users" WHERE "users"."remember_token" = 'DUoiwJ5FkXlFIXty3UE8xA' LIMIT 1[0m
[1m[35mOrder Load (0.4ms)[0m SELECT "orders".* FROM "orders" WHERE "orders"."id" = ? LIMIT 1 [["id", 34]]
[1m[36mProduct Load (0.6ms)[0m [1mSELECT "products".* FROM "products" LIMIT 5 OFFSET 0[0m
Rendered order_items/new.html.erb (8.6ms)
Rendered order_items/new.html.erb (3.9ms)
Rendered order_items/new.html.erb (3.6ms)
[1m[35m (0.6ms)[0m SELECT COUNT(*) FROM "order_items" WHERE "order_items"."order_id" = 34
[1m[36mOrderItem Load (0.4ms)[0m [1mSELECT "order_items".* FROM "order_items" WHERE "order_items"."order_id" = 34[0m
[1m[35mProduct Load (0.6ms)[0m SELECT "products".* FROM "products" WHERE "products"."id" = 3 LIMIT 1
Rendered carts/_cart_row.html.erb (6.8ms)
Rendered carts/_shopping_cart.html.erb (20.4ms)
Rendered carts/new.html.erb within layouts/application (74.1ms)
Rendered layouts/_header.html.erb (6.9ms)
Rendered layouts/_footer.html.erb (1.2ms)
Completed 200 OK in 378ms (Views: 366.0ms | ActiveRecord: 3.4ms)