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_id
在stories
表中定义一个列,但不解释这样做的方法.
进行此更改的正确方法是创建新的迁移.按照惯例,它应该被调用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将假定您指定的相同类名和外键.
您的表中应该有一个如下所示的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)
编辑
查看艾米丽的回答以获取详细解释。
归档时间: |
|
查看次数: |
23066 次 |
最近记录: |