2013-11-06 3 views
0

У меня проблема. У меня есть модель пользователя:STI: Неизвестный атрибут в рельсах 4

class User < ActiveRecord::Base 
end 

модель Подрядчика которая унаследовала от пользователя

class Contractor < User 
    has_many :contractorEs 
    has_many :customers 
end 

и модель клиента, который унаследовал от пользователя

class Customer < User 
    belongs_to :contractor 
    has_many :customer_es 
end 

В моей таблице Customers У меня есть столбец "contractor_id" , Тогда я rails c и тип:

c = Contractor.first 
c.customers.build 

И unknown attribute: contractor_id произошло. Тогда я типа:

customer = Customer.new 

и есть:

<Customer id: nil, first_name: nil, last_name: nil, address: nil, country: nil, zip: nil, city: nil, phone: nil, company_name: nil, signature: nil, type: "Customer", created_at: nil, updated_at: nil, v_token: nil, password_digest: nil, u_token: nil, email: nil, state: "new"> 

но нет в списке нет contractor_id. Как это решить? Я использую рельсы 4 и ruby ​​2.0.

ответ

1

Создание миграции и добавить его в базу данных

rails g migration AddContractorIdToUsers contractor_id:integer 

rake db:migrate 

Затем приступают к установке на самосправочные отношения Self referential Active Record

+0

У меня уже есть contractor_id в таблице моих клиентов. Он добавляется в модель создания. – cnaize

+0

Мы не видим его в вашем файле Customer.new, который представляет собой только строку пользователя в db. См. Второй ответ. У вас нет столбца contractor_id. – TheIrishGuy

+0

вам нужно добавить отдельный столбец для самореференции, вы не можете полагаться только на первичные ключи, вам нужен внешний ключ и настройка атрибутов в ассоциациях. – TheIrishGuy

1

Единственная причина, я знаю эту ошибку, потому что users таблица не имеют столбец contractor_id. Вот почему вы не видите его в списке атрибутов для Клиента. Дважды проверьте таблицу и выполните миграцию, чтобы добавить этот столбец, если он не существует.

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