未知属性: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’字段。 有任何想法吗?

Kulbir是正确的,您需要在stories表中定义user_id列,但不解释这样做的方法。

进行此更改的正确方法是创建新迁移。 按照惯例,它应该被称为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将假定您指定的相同类名和外键。

您应该在stories表中有一个user_id字段,如下所示,以在模型中定义关联。

 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 

编辑

查看Emily的答案以获得详细说明。

您应该使用新语法并将fieldtype作为符号传递

 add_column :stories, :user_id, :integer