2015-12-23 2 views
1

Я работаю с Rails, и при настройке некоторых тестов я столкнулся:Missing Атрибут Ошибка

ActiveModel::MissingAttributeError: 
can't write unknown attribute `group_id` 

Я предполагаю, что этот вопрос в моих отношениях. У меня есть

class Group < ActiveRecord::Base 
    has_many :transactions 
    has_many :users 
end 

И

class Transaction < ActiveRecord::Base 
    belongs_to :group 
    belongs_to :user 
end 

И, наконец,

class User < ActiveRecord::Base 
    belongs_to :group 
    has_many :transactions 
end 

Я видел, что кто-то ту же ошибку, потому что они используют has_one, а не belongs_to и нужно добавить столбец ID к их БД. Я использую belongs_to, хотя, поэтому я не думаю, что это то, что мне нужно? Есть идеи?

ответ

1

Похоже, что у вас нет колонки group_id в вашем db.

Вы должны помнить, что Rails построен поверх relational database, что означает, что вы можете получить доступ к «родственным» данным, ссылаясь на foreign_key.

При настройке belongs_to/has_many ассоциации, belongs_to таблицы должна иметь соответствующий внешний ключ (в вашем случае group_id):

enter image description here

Ваша ошибка не сформулирует какую модель вы получение исключения; Я бы рискнул предположить, что это User или Transaction.

-

Чтобы исправить это, я бы рекомендовал создать миграцию для добавления атрибута group_id к соответствующей модели:

$ rails g migration AddGroupId 

#db/migrate/add_group_id____________.rb 
class AddGroupID < ActiveRecord::Migration 
    def change 
     add_column :users, :group_id, :integer 
    end 
end 

$ rake db:migrate 
1

Если вы не создали модель, на которую ссылаетесь, с миграцией, имеющей ссылки, вам все равно потребуется миграция в вашей базе данных. Простой способ проверить, есть ли в базе данных, это ваше some_project_root/db/schema.rb. Если вы не видите нужное вам поле, вам нужно будет сгенерировать его. То, как вы это сделаете, - запустить rails g migration AddXidToY x_id:integer. Он должен установить поле вверх для идентификатора в нужной таблице.

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