【发布时间】:2016-02-11 20:10:21
【问题描述】:
我在我的 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' 和 'rake db:test:prepare'。
这是我的 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
我认为这可能是路线错误,但我不确定。
如何解决此错误?谢谢。
【问题讨论】:
-
从您的
schema.rb添加迁移和相关条目。但该错误意味着您缺少交货表上的order_id列。所以要么删除类之间的关系,要么确保列在那里 -
我已经在上面包含了我的 schema.rb,这似乎表明我的交付表中已经有一个 "orders_id" 列。这是问题所在(因为它是复数而不是单数)?如果是这样,你建议我如何解决它?
标签: ruby-on-rails ruby activerecord