在重置db后,在Orders#中获取ActiveRecord :: StatementInvalid在Ruby on Rails应用程序中显示

时间:2016-02-11 10:31:41

标签: ruby-on-rails ruby activerecord

尝试时,我在Ruby on Rails应用程序中收到以下错误 渲染表格。

特别是,我收到了这个错误:

 SQLite3::SQLException: no such column: deliveries.order_id: SELECT 
"deliveries".* FROM "deliveries" WHERE "deliveries"."order_id" = ?

引用这两行作为show.html.haml文件中的原因:

= render @order.deliveries

= render "deliveries/form"

这是form.html.haml文件:

=simple_form_for([@order, @order.deliveries.build]) do |f|
   =f.input :name, input_html: { class: "form-control"}
   =f.input :deliveryaddress, input_html: { class: "form-control"}
   =f.input :deliverytime, input_html: { class: "form-control"}
   =f.input :notes, input_html: { class: "form-control"}
   %br/
   =f.button :submit class: "btn btn-primary btn-lg"

这是我的部分交付_deliveries.html.haml:

%p= delivery.name
%p= delivery.deliveryaddress
%p= delivery.deliverytime
%p= delivery.notes

这是我的deliveries_controller.rb:

class DeliveriesController < ApplicationController
    def create
      @order = Order.find(params[:order_id])  #find the order the delivery is   associated with in the controller
      @deilvery = @order.deliveries.create(params[:order].permit(:name, :deliveryaddress, :deliverytime, :notes))
      redirect_to order_path(@order)
    end
end

另外,我已经尝试过rake db:drop db:create db:migrate&#39;和&#39; rake db:test:prepare&#39;。

这是我的schema.rb:

ActiveRecord::Schema.define(version: *) do

create_table "deliveries", force: :cascade do |t|
t.string   "name"
t.string   "deliveryaddress"
t.integer  "deliverytime"
t.string   "notes"
t.integer  "orders_id"
t.datetime "created_at",      null: false
t.datetime "updated_at",      null: false
end

 add_index "deliveries", ["orders_id"], name: "index_deliveries_on_orders_id"

create_table "orders", force: :cascade do |t|
t.datetime "date"
t.string   "name"
t.string   "pickup"
t.datetime "pickuptime"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
end

我认为这可能是路线的错误,但我不确定。

如何解决此错误?谢谢。

2 个答案:

答案 0 :(得分:1)

在这里做一些假设,但如果您遵循Rails标准,那么您的列名称错误:

class Order < ActiveRecord::Base
  has_many :deliveries
end

class Delivery < ActiveRecord::Base
  belongs_to :order
end

因此,这需要使用列order_id,而不是orders_id。 要解决此问题,您需要执行以下迁移:

class RenameOrderIdsCOlumn < ActiveRecord::Migration
  def up
     rename_column(:deliveries, :order_ids, :order_id)
  end
end

答案 1 :(得分:1)

如果要更改列名?

在rails 4中使用此命令生成迁移以重命名列。

rails g migration ChangeOrderIdToOrdersId