未知属性:user_id

cna*_*ize 13 ruby activerecord ruby-on-rails

我收到错误未知属性: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'
  ...
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

它不包含'user_id'字段.有任何想法吗?

Emi*_*ily 27

Kulbir是正确的,你需要user_idstories表中定义一个列,但不解释这样做的方法.

进行此更改的正确方法是创建新的迁移.按照惯例,它应该被调用add_user_id_to_stories并将按如下方式创建(假设您使用的是Rails 3+):

rails generate migration add_user_id_to_stories
Run Code Online (Sandbox Code Playgroud)

如果你运行它,它实际上应该生成一个已经包含你需要做出的改变的迁移,它应该是这样的:

add_column :stories, :user_id, :integer
Run Code Online (Sandbox Code Playgroud)

顺便说一句,当你遵循关于关联命名的Rails约定时,你实际上可以跳过很多额外的规范.在User模型中,您可以指定just has_many :stories和在Story模型中指定belongs_to :user.Rails将假定您指定的相同类名和外键.


Kul*_*ini 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
Run Code Online (Sandbox Code Playgroud)

编辑

查看艾米丽的回答以获取详细解释。