2016-02-25 3 views
0

У меня есть модель Customer, Item и Order. Клиент has_many Items через Заказы и has_many Orders. Пункт has_many Клиенты через Заказы и has_many Заказы. Заказ принадлежит Заказчику и Элементу. Я получаю ошибку ActiveRecord::UnknownAttributeError: unknown attribute 'customer_id' for Order. при попытке сохранить через консоль:ActiveRecord :: UnknownAttributeError: неизвестный атрибут 'customer_id' для заказа

клиента модель:

class Customer < ActiveRecord::Base 
    has_many :orders 
    has_many :items, through: :orders 

    devise :database_authenticatable, :registerable, 
     :recoverable, :rememberable, :trackable, :validatable 

end 

Item модель:

class Item < ActiveRecord::Base 
    has_many :orders 
    has_many :customers, through: :orders 
end 

Заказать модель:

class Order < ActiveRecord::Base 
    belongs_to :item 
    belongs_to :customer 
end 

Заказы стол:

class CreateOrders < ActiveRecord::Migration 
    def change 
    create_table :orders, id: false do |t| 
     t.belongs_to :customers, index: true 
     t.belongs_to :items, index: true 
     t.timestamps null: false 
    end 
    end 
end 

Командная консоль для сохранения заказа (обратите внимание, что cuban_sandwich и Крисом сохраняются в виде новых клиентов и пункт уже.)

order1 = chris.orders.build(customers_id: chris.id, items_id: cuban_sandwich.id)

Могли Я экономлю это неправильно? Или существует проблема с моими ассоциациями модели/таблицы?

ответ

1

Ваша проблема связана с вашей миграции. Эти строки:

t.belongs_to :customers, index: true 
t.belongs_to :items, index: true 

создания поля называется customers_id и items_id, не customer_id и items_id (заметим, единственном числе против множественного числа).

A принадлежит к ассоциации, является взаимной привязкой, поэтому она должна быть сингулярной, customer_id.

Откат перенастройки с rake db:rollback и изменить два belongs_to вызовов быть customer и item.

2

Сначала убедитесь, что у вас есть customer_id колонки на orders таблице

rails g migration AddCustomerIdToOrders customer_id:integer 
rake db:migrate 

Кроме того, я не верю, что вам нужно поставить customers_id как он будет заполнен, когда производится объединение. Кроме того, необходимо использовать create не build

вместо этого

order1 = chris.orders.build(customers_id: chris.id, items_id: cuban_sandwich.id) 

попробовать это

order1 = chris.orders.create(items_id: cuban_sandwich.id) 
+0

Я все еще получаю то же сообщение об ошибке. – Ctpelnar1988

+1

Извините, я пропустил ту часть вашей ошибки.Я обновил свой ответ, чтобы решить эту проблему. – MilesStanfield

+0

'# <Заказ customers_id: nil, items_id: 2, created_at:" 2016-02-25 02:11:08 ", updated_at:" 2016-02-25 02:11: 08 ", customer_id: 1>' Должен ли я удалить t.belongs_to: customers, index: true? – Ctpelnar1988

Смежные вопросы