Неизвестный атрибут: user_id
Я получаю неизвестный атрибут ошибки: user_id запускает выполнение current_user.stories.build
class User < ActiveRecord::Base
has_many :stories, class_name: 'Story', foreign_key: 'user_id', dependent: :destroy
...
class Story < ActiveRecord::Base
belongs_to :user, class_name: 'User', foreign_key: 'user_id'
...
schema.rb
create_table "stories", :force => true do |t|
t.string "responsible"
t.string "descr"
t.string "state"
t.datetime "created_at", :null => false
t.datetime "updated_at", :null => false
end
create_table "users", :force => true do |t|
t.string "email"
t.string "password_digest"
t.datetime "created_at", :null => false
t.datetime "updated_at", :null => false
t.string "name"
end
Он не содержит поля user_id. Любые идеи?
Ответы
Ответ 1
Kulbir правильно, что вам нужно определить столбец user_id
в вашей таблице stories
, но не объясняет, как это сделать.
Правильный способ сделать это изменение - создать новую миграцию. По соглашению он должен называться add_user_id_to_stories
и будет создан следующим образом (если вы используете Rails 3 +):
rails generate migration add_user_id_to_stories
Если вы запустите это, он должен фактически создать миграцию, которая уже содержит изменения, которые вам нужно внести, что должно быть примерно так:
add_column :stories, :user_id, :integer
В стороне, когда вы следуете соглашениям Rails об именах ассоциаций, которыми вы являетесь, вы можете фактически пропустить большую часть дополнительной спецификации. В модели User
вы можете указать только has_many :stories
и в модели Story
указать belongs_to :user
. Rails будет использовать те же имена классов и внешние ключи, которые вы указали.
Ответ 2
У вас должно быть поле user_id
в вашей таблице stories
, как показано ниже, чтобы определить ассоциацию в ваших моделях.
create_table "stories", :force => true do |t|
t.integer "user_id"
t.string "responsible"
t.string "descr"
t.string "state"
t.datetime "created_at", :null => false
t.datetime "updated_at", :null => false
end
...
end
Забастовкa >
Edit
Проверьте ответы Эмили для подробного объяснения.
Ответ 3
вы должны использовать новый синтаксис и передать тип поля как символ
add_column :stories, :user_id, :integer