通过使用rails中的条件检索它来更新表单

时间:2016-01-25 10:43:16

标签: ruby-on-rails

我对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; =

找到订单

请帮助我..

1 个答案:

答案 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