rails 5中的ActiveModel :: UnknownAttributeError

时间:2018-03-30 15:43:20

标签: ruby-on-rails ruby-on-rails-5

我正在尝试创建一个类似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

发生了什么事?

2 个答案:

答案 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

这应该可以解决问题。