尝试时,我在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
我认为这可能是路线的错误,但我不确定。
如何解决此错误?谢谢。
答案 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