0

У меня две модели.Ruby on Rails - Отсутствует ошибка атрибута в результате ассоциации

  • Компания
  • Меморандум

Я хочу, чтобы компания, чтобы иметь несколько меморандумов и меморандум, чтобы только одна компания.

memorandum.rb

class Memorandum < ActiveRecord::Base 
    belongs_to :company 
end 

company.rb

class Company < ActiveRecord::Base 
    has_many :memorandums, dependent: :destroy 
    # validation lines omitted 
end 

При попытке присвоить внешний ключ к меморандуму я получаю отсутствующего Ошибка атрибута can't write unknown attribute "company_id"

Я назначаю компанию внутри контроллера компании. Меморандум создается до этого, и идентификатор текущего меморандума проводится внутри хэш-сессии.

companies_controller.rb

def create 
    @company = Company.new(company_params) 
    Memorandum.find(session[:memorandum_id]).company = @company 

    respond_to do |format| 
    if @company.save 
     format.html { redirect_to @company, notice: 'Company was successfully created.' } 
     format.json { render action: 'show', status: :created, location: @company } 
    else 
     format.html { render action: 'new' } 
     format.json { render json: @company.errors, status: :unprocessable_entity } 
    end 
    end 
end 
+3

В таблице 'memorandums' есть' company_id' в качестве внешнего ключа.? подтвердите пожалуйста – Athar

+0

извините довольно новый для рельсов. Я хочу, чтобы я мог проверить? – Bevilacqua

+2

открытый 'рельсы c' в терминале. и напишите этот «Меморандум», он покажет вам атрибуты таблицы «memorandums» – Athar

ответ

0

Я настоятельно рекомендую вам сделать читать Ruby On Rails Guides для Active Record Association. Концепции очень четко объяснены там с примером.

Вот два примера ссылок: has_many и belongs_to, которые помогут вам разобраться.

Чтобы исправить текущую проблему, необходимо миграции добавить company_id к вашему memorandums таблице:

rails g migration addCompanyIdToMemorandums company_id:integer 

и затем запустить миграцию:

bundle exec rake db:migrate 

Как выше гид объяснит, вам нужен внешний ключ в таблице association_to ассоциации, чтобы указать его родительскую таблицу. Поскольку ваши меморандумы принадлежат_company, вам нужно добавить company_id в таблицу меморандумов, которую мы только что сделали, используя вышеуказанную миграцию.

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