我对rails很新。我想更新符合我条件的数据..我有一个提交两个值的表单(order_no,order_date)。我想要检索与之相关的所有数据order_no ..我不知道为此编写控制器代码。有人可以帮助我..这是我的代码..如果你觉得这个疑问是愚蠢的,我真的很抱歉。我真的不知道如何在rails中高效编码。 //我的观点
<%= form_for([@order], :url=>{:controller=>"users"}) do |i|%>
<tr><td><%= i.label :order_no,"Order No" %></td></tr>
<tr><td><%= i.text_field :order_no %></td></tr>
<tr><td><%= i.label :order_date,"Order Date" %></td></tr>
<tr><td><%= i.text_field :order_date %></td></tr>
<%= link_to "Update",users_update_orderSummary_path(i) %>
<% end %>
我的控制器,
def edit_order
@order=Order.find params[:id]
end
def update_order
@order=Order.find params[:id]
@order=Order.where(order_no = params[:order_no])
if @order.update_attributes(order_params)
flash[:success] = "Order updated"
redirect_to :action=>"login"
else
render "edit_order"
end
end
我收到以下错误..
UsersController中的ActiveRecord :: RecordNotFound#update_orderSummary 无法通过&#39; id&#39; =
找到订单
请帮助我..
答案 0 :(得分:0)
您应该将order
操作放入单独的控制器中:
#config/routes.rb
resources :orders, only: [:edit, :update], module: :users #-> url.com/orders/:id/edit
#app/controllers/users/orders_controller.rb
class Users::OrdersController < ApplicationController
def edit
@order = Order.find params[:id]
end
def update
@order = Order.find params[:id]
@orders = Order.where order_no: params[:order][:order_no]
if @orders.update_all order_params
redirect_to action: :logic, success: "Order Updated"
end
end
private
def order_params
params.require(:order).permit(:order_no, :order_date)
end
end
#app/views/users/orders/new.html.erb
<%= form_for @order do |f| %>
<%= f.text_field :order_no %>
<%= f.text_field :order_date %>
<%= f.submit %>
<% end %>
您的主要问题是,您尝试使用update
方法做两件事 - Order.find
&amp;&amp; Order.where
。
你不能同时更新 - 你必须做一个。
我使用了update_all
,可以在Order.where
集合中使用;如果您想更新单个对象,只需使用@order.update