我无法向客户添加订单

时间:2015-11-30 15:37:02

标签: ruby-on-rails ruby activerecord associations crud

我正在开发一个订单管理系统,用户可以在其中向客户添加订单。到目前为止,我可以添加客户,编辑现有订单和删除现有客户。我可以通过ruby控制台向客户添加订单,但不能通过网络添加订单。我希望有人可以帮助我。

这是我得到Webversion的错误消息

> > ActiveRecord::RecordNotFound in OrdersController#create Couldn't find Customer with 'id'=
> 
> Extracted source (around line #13): 11 12 13 14 15 16
>               
> 
>     def create
>       @customer = Customer.find params[:customer_id]
>       @order = @customer.orders.new(params[:order]) 
>       @order.save    end
> 
> Rails.root: /Users/cecil/Desktop/order_management_systeem
> 
> Application Trace | Framework Trace | Full Trace
> app/controllers/orders_controller.rb:13:in `create' Request
> 
> Parameters:
> 
> {"utf8"=>"✓", 
> "authenticity_token"=>"IB2vucl9bjhgPtSFaXo9BSSFSmE0WtClIOKKBo2H9PPz45v6nz8YWciwbVRMGoVnrgX/oNaZn84QONel4rpOcw==",
> "order"=>{"customer_id"=>"13",  "order"=>"sdfada", 
> "verstuurt"=>"false"},  "commit"=>"create"}

错误消息服务器版本

Started POST "/orders" for ::1 at 2015-11-30 11:43:05 +0100
Processing by OrdersController#create as HTML
  Parameters: {"utf8"=>"✓", "authenticity_token"=>"xZp71jR+ZJhvsO8qweF2v3MUBNisG7iGrHVXd1D79VMWZE+VYjwS+cc+Vvvkgc7d+ZSxGU7Y9+2crwrUP8ZP0w==", "order"=>{"customer_id"=>"16", "order"=>"Haha", "verstuurt"=>"false"}, "commit"=>"create"}
  Customer Load (0.1ms)  SELECT  "customers".* FROM "customers" WHERE "customers"."id" = ? LIMIT 1  [["id", nil]]
Completed 404 Not Found in 1ms (ActiveRecord: 0.1ms)

ActiveRecord::RecordNotFound (Couldn't find Customer with 'id'=):
  app/controllers/orders_controller.rb:13:in `create'

我的订单控制器

class OrdersController < ApplicationController
  def index
     @order = Order.find(params[:customer_id])
  end

  def new
      @customer = Customer.find params[:customer_id]
      @order = @customer.orders.new
   end


    def create
      @customer = Customer.find(params[:customer_id])
      @order = @customer.orders.new(params[:order]) 
      @order.save
   end

  end

  def show
   @order = Order.find(params[:customer_id]) 
  end

  def edit
     @customer = Customer.find(params[:customer_id])
  end

    def update
    #Find a exisiting object using form paramters
     @order = Order.find(params[:id])
    if @order.update_attributes(order_params)

    #if Update succeeds, redirect to the index action
    flash[:notice] = "Subject updated successfully"
    redirect_to(:action => 'show', :id => @order.id)
    else
    #If save fails, redisplay the form so user can fix problems
    render('edit') #het zit in de new.html template
    end
  end

  def delete
  end

  private
  def order_params
    params.require(:order).permit(:customer_id, :pakket, :verstuurt)
  end

我的订单型号

> class Order < ActiveRecord::Base      belongs_to :customers
> 
>   scope :visible, lambda { where(:visible => true) }  scope :invisible,
> lambda { where(:visible => false) }   scope :sorted, lambda {
> sorted("orders") }    scope :newest_first, lambda {
> order("orders.created_at DESC")}  scope :search, lambda {|query|
>       where(["name LIKE ?", "%#{query}%"])}  end

我的订单

<%= form_for @order do |f| %>   <table summary="subject form fields">
    <%= f.hidden_field :customer_id , :value=>params[:customer_id] %>
    <tr>
      <th>Package</th>
      <td><%= f.text_field(:order) %></td>
    </tr>
    <tr>
    <th>Sent</th>
      <td><%= f.text_field(:verstuurt) %></td>
    </tr>   </table>

  <div class="form-buttons">
    <%= f.submit "create" %>    </div> <% end %>

我的路由

Rails.application.routes.draw do

  resources :orders do
  resources :customers
  end


  get ':controller/:action/:id/:customer_id'
  get ':controller/:action/:id/:customer_id'


  get 'customers/index'

  get 'customers/new'

  get 'customers/show'

  get 'customers/edit'

  get 'customers/delete'

  match ':controller(/:action(/:id))', :via => [:get, :post]

  get 'orders/index'

  get 'orders/new'


  get 'orders/show'

  get 'orders/edit'

  get 'orders/delete'

1 个答案:

答案 0 :(得分:0)

尝试从

更改隐藏字段
<%= f.hidden_field :customer_id , :value=>params[:customer_id] %>

<%= f.hidden_field :customer_id , :value=> @order.customer_id %>