我正在尝试创建一个类似reddit的网站,所以我创建了一个应该包含帖子的论坛模型,因此我还创建了一个Post模型,我想成为一个论坛的孩子。我的这个想法的代码是:
forum.rb
class Forum < ApplicationRecord
has_many :posts
validates :name, presence: true,
length: { minimum: 2 }
end
post.rb
class Post < ApplicationRecord
validates :title, presence: true,
length: { minimum: 5 }
validates :text, presence: true,
length: { minimum: 5 }
belongs_to :forum
end
相应的迁移是:
create_forums.rb
class CreateForums < ActiveRecord::Migration[5.1]
def change
create_table :forums do |t|
t.string :name
t.text :description
t.timestamps
end
end
end
create_posts.rb
class CreatePosts < ActiveRecord::Migration[5.1]
def change
create_table :posts do |t|
t.string :title
t.text :text
t.references :forum, index: true, foreign_key: true
t.timestamps
end
end
end
当我尝试在特定论坛上创建新帖子时,我的问题就出现了。例如,如果我运行@forum.posts.create(title: "Title", text: "Body")
,我会使用描述ActiveModel::UnknownAttributeError in Posts#new
获取unknown attribute 'forum_id' for Post
。
发生了什么事?
答案 0 :(得分:1)
生成后是否运行迁移? (rake db:migrate
)
我可以在测试中发现此错误的唯一方法是从posts表中删除论坛参考/关系字段,然后尝试创建与论坛相关的帖子。使用t.references :forum, index: true, foreign_key: true
运行迁移时,该命令对我来说非常完美。
如果您在运行迁移后添加了参考行,则可以通过运行rake db:drop db:create db:migrate
重置数据库,因为您在表创建迁移文件中有它,所以应该很好,但值得注意的是如果要添加或删除列或修改数据库,则应为此创建新的迁移,而不是通过放置/创建过程运行。
答案 1 :(得分:0)
您是否迁移了数据库?如果否,则rails db:migrate
然后重置您的数据库:rails db:setup
这应该可以解决问题。