【问题标题】:ActiveModel::MissingAttributeError: can't write unknown attribute `book_id`ActiveModel::MissingAttributeError:无法写入未知属性`book_id`
【发布时间】:2017-03-20 20:14:12
【问题描述】:

我有这个问题,但不知道为什么。 我用生成器创建模型:

bin/rails generate model Book name:string author:string description:text cover:string
bin/rails generate model Episode name:string description:text art:string
ant other...

book.rb

class Book < ApplicationRecord
has_many :episodes
end

episode.rb

class Episode < ApplicationRecord
belongs_to :book
has_many :scenes
end

在控制台中我尝试:book.episodes &lt;&lt; episode 我有一个错误:ActiveModel::MissingAttributeError: can't write unknown attribute "book_id" 我的 schema.rb

ActiveRecord::Schema.define(version: 20170320111956) do
# These are extensions that must be enabled in order to support this database
enable_extension "plpgsql"
create_table "answers", force: :cascade do |t|
t.text     "text"
t.string   "next_scene"
t.string   "next_episode"
t.string   "voiceover"
t.integer  "end"
t.datetime "created_at",   null: false
t.datetime "updated_at",   null: false
end
create_table "books", force: :cascade do |t|
t.string   "name"
t.string   "author"
t.text     "description"
t.string   "cover"
t.datetime "created_at",  null: false
t.datetime "updated_at",  null: false
end
create_table "episodes", force: :cascade do |t|
t.string   "name"
t.text     "description"
t.string   "art"
t.datetime "created_at",  null: false
t.datetime "updated_at",  null: false
end
create_table "scenes", force: :cascade do |t|
t.string   "name"
t.text     "text"
t.integer  "choise"
t.string   "next_scene"
t.string   "next_episode"
t.string   "art"
t.string   "music"
t.string   "sound_fx"
t.string   "voiceover"
t.integer  "end"
t.datetime "created_at",   null: false
t.datetime "updated_at",   null: false
end
end

在模式中我没有 id_book,但为什么呢?我也做了 db:migrate 并再次出现错误。

【问题讨论】:

  • 你必须在 Episode 模型中添加 book_id
  • 添加“belongs_to :book”时不是自动添加的吗?好,谢谢。这是工作!

标签: ruby-on-rails ruby


【解决方案1】:

默认情况下,Rails 使用将主列命名为自动生成列id 的约定。如果您希望指定不同的主键,例如 book_id,您可以执行以下操作:

class Book < ApplicationRecord
  self.primary_key = "book_id"
end

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-14
    相关资源
    最近更新 更多