我在执行 current_user.stories.build 时遇到错误 unknown attribute: user_id
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'
...
架构.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 将采用您指定的相同类名和外键。
关于ruby-on-rails - 未知属性 : user_id,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11529405/