Мой код выглядит так:Невозможно записать неизвестный атрибут `challenge_id»
routes.rb
resources :challenges do
resources :problems
end
приложение/модели/challenge.rb
class Challenge < ActiveRecord::Base
has_many :problems
end
приложение/модели/problem.rb
class Problem < ActiveRecord::Base
belongs_to :challenge
end
db/migrate/createchallen ges.db
class CreateChallenges < ActiveRecord::Migration
def change
create_table :challenges do |t|
t.string :name
t.timestamps
end
end
end
дб/мигрирует/createproblems.rb
class CreateProblems < ActiveRecord::Migration
def change
create_table :problems do |t|
t.belongs_to :challenge
t.string :description
t.timestamps
end
end
конец
приложение/контроллеры/problem_controller.rb
class ProblemsController < ApplicationController
def new
@challenge = Challenge.find(params[:challenge_id])
@problem = Problem.new(:challenge => @challenge)
end
end
Я могу создать "вызов" без проблем, но когда я создаю новую «проблему», я получил ошибку:
can't write unknown attribute `challenge_id'
На линии
@problem = Problem.new(:challenge => @challenge)
Что может быть причиной этой ошибки?
Ошибка все тот же. И db/schema.rb, похоже, не создает «challenge_id». Нужно ли мне создать новую миграцию, чтобы добавить этот новый столбец, или если рельсы позаботятся об этом? –
Просто, чтобы сообщить вам: я не забыл запустить миграцию :) –
Если вы уже выполнили миграцию, вы не можете внести в нее изменения и повторить эту миграцию. Я бы рекомендовал: 1. удалить/воссоздать/перенести, 2. создать новую миграцию, добавить ссылки: вызов или 3. unmigrate (иначе он удалит таблицу), а затем изменить миграцию и ремигрировать. –