【问题标题】:ActiveModel::UnknownAttributeError in rails 5Rails 5 中的 ActiveModel::UnknownAttributeError
【发布时间】:2018-03-30 15:43:19
【问题描述】:

我正在尝试制作一个类似 reddit 的网站,所以我创建了一个应该包含帖子的论坛模型,因此我还创建了一个帖子模型,我想成为论坛的孩子。我对这个想法的代码是:

论坛.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

发生了什么事?

【问题讨论】:

  • @forum 是一个有效的对象吗?
  • @hashrocket 是的

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


【解决方案1】:

您是否在生成迁移后运行了迁移? (rake db:migrate)

在测试中出现此错误的唯一方法是从帖子表中删除论坛参考/关系字段,然后尝试创建与论坛相关的帖子。当使用t.references :forum, index: true, foreign_key: true 运行迁移时,该命令对我来说运行完美。

如果您在运行迁移后添加了参考行,您可以通过运行rake db:drop db:create db:migrate 来重置您的数据库,并且您应该很好,因为您在表创建迁移文件中有它,但值得注意的是,如果您要添加或删除列或修改您的数据库,您应该为此创建新的迁移,而不是通过删除/创建过程运行。

【讨论】:

    【解决方案2】:

    您迁移数据库了吗?如果没有,那么rails db:migrate

    然后重置您的数据库:rails db:setup

    这应该可以解决问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-11-13
      • 2018-11-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多