我的观点
<h1>Return a Book</h1>
<%= form_tag("/orders/returnB", method: "get") do %>
<div class="form-group">
<%= label_tag :ID, "ID" %>
<%= text_field_tag :ID, nil, class: "form-control" %>
</div>
<%= submit_tag "Submit", class: "btn btn-default" %>
<% end %>
我的控制器
def returnB
getid = params[:ID]
@order = Order.find(getid)
@order.destroy
respond_to do |format|
format.html { redirect_to orders_url, notice: 'Order was destroyed.' }
format.json { head :no_content }
end
end
它只是直接进入控制器,因为我的控制器无法获取id,因此它会出错。所以我在我的路线上这样做:
get 'orders/return' => 'orders#returnB'
答案 0 :(得分:0)
在简单的rails流中,请求首先命中控制器,然后呈现与控制器名称相同的视图模板。
我认为您的表单已在
中定义view/orders/returnB.erb
这就是为什么请求在呈现表单之前首先命中控制器的原因。我建议你将表单移动到其他视图模板中。
答案 1 :(得分:0)
将您的路线更改为:
delete 'orders/return' => 'orders#return_order'
应该使用删除来销毁。
将表格更改为:
<h1>Return a Book</h1>
<%= form_tag("/orders/return", method: "delete") do %>
<div class="form-group">
<%= label_tag :ID, "ID" %>
<%= text_field_tag :ID, nil, class: "form-control" %>
</div>
<%= submit_tag "Submit", class: "btn btn-default" %>
<% end %>
将操作名称从returnB
更改为return_order
,因为它不是编写方法名称的正确惯例。
将控制器代码更改为:
def return_order
@order = Order.find_by_id(params[:ID])
@order.destroy
respond_to do |format|
format.html { redirect_to orders_url, notice: 'Order was destroyed.' }
format.json { head :no_content }
end
end