【发布时间】:2016-08-06 18:09:45
【问题描述】:
我有自动生成的订单和 order_items 控制器和模型。
我的路由器是这样的:resources "/orders", OrderController do
resources "/order_items", OrderItemController
end
在订单 show.html 页面上,我调用了不同的 order_item 操作。我可以创建和删除将它与订单关联的 order_item:
<%= render Pos1.OrderItemView, "item_quantity.html", changeset: @order_item_changeset, action: order_order_item_path(@conn, :create, @order) %>
<%= link "delete", to: order_order_item_path(@conn, :delete, @order, @order_item), method: :delete %>
但是,如果我尝试调用更新操作(不是来自 order_item 的 edit.html,而是来自 order 的 show.html,如上面的创建/删除),它会返回以下错误:
no route found for POST /orders/53/order_items/62 (Pos1.Router)
嗯,我知道方法应该是PUT(用于更新),但如果我使用链接使用method: "put"
<%= link "+", to: order_order_item_path(@conn, :update, @order, @order_item), method: "put" %>
仍然无法使其工作。我可以调用创建和删除,但不能从订单的 show.html 更新操作,这对我来说似乎很奇怪。更重要的是,我可以从 order_item edit.html 页面调用 update 并且它运行良好。我究竟做错了什么?已经为此苦苦挣扎了一段时间。
提前致谢!编辑:我在 order_item 中的更新操作:
def update(conn, %{"id" => id}) do
order_item = Repo.get!(OrderItem, id)
order = Repo.get!(Order, order_item.order_id)
changeset = OrderItem.changeset(order_item, %{quantity: order_item.quantity + 1})
case Repo.update(changeset) do
{:ok, order_item} ->
conn
|> put_flash(:info, "Order item quantity increased successfully.")
|> redirect(to: table_order_path(conn, :show, order.table, order))
{:error, _changeset} ->
conn
|> put_flash(:error, "Failed to increase order item!")
|> redirect(to: table_order_path(conn, :show, order.table, order))
end
结束
Order_item.html.eex:
<tr>
<td><%= @order_item.food.name %></td>
<td><%= @order_item.quantity %></td>
<td><%= link "+", to: order_order_item_path(@conn, :update, @order_item), method: :put %></td>
<td><%= link "-", to: order_order_item_path(@conn, :delete, @order, @order_item), method: :delete, class: "btn btn-danger btn-xs" %> </td>
</tr>
【问题讨论】:
-
method: "put"时出现什么错误?另请注意,该代码中存在语法错误(也许您在此处发布之前已更改?)。 -
嘿@Dogbert,对不起,我修正了语法。至于错误,我得到“No helper clause for Pos1.Router.Helpers.order_order_item_path defined for action :update with arity 3. 请检查函数、arity 和 action 是否正确。”
-
啊,试试
method: :patch吧。 -
使用方法: :patch 不幸得到与使用方法相同的错误: :put
-
您可以发布该错误的堆栈跟踪吗?您不会在您发布的代码中的任何位置使用
:update调用order_order_item_path,总共有3 个参数。另外,请尝试在您的代码库中搜索对具有 3 个参数的该函数的调用。
标签: post elixir phoenix-framework