我正在Lynda.com(Ruby on Rails 5基础培训)上一门课程,但是在表上添加记录时遇到了问题。以下是一些详细信息:目标是创建一个联合表,多对多关联,因此我们首先尝试在要在新表上使用的表上创建记录。每次我写这行:
section = Sections.create(:name => "Section One", :position => 1)
它给了我
(0.2ms) BEGIN
(0.3ms) ROLLBACK
=> #<Section id: nil, page_id: nil, name: "Section One", position: 1, visible: false, content_type: nil, content: nil, created_at: nil, updated_at: nil>
我检查了我的代码,一切似乎都很好。通过在其他表上插入记录的方式。就是这张桌子
重要一点,该表是先前创建的表。这是我们正在尝试创建的新产品。
我在做什么错?
这是我从迁移代码:
class CreateSections < ActiveRecord::Migration[5.2]
def up
create_table :sections do |t|
t.integer "page_id"
t.string "name"
t.integer "position"
t.boolean "visible", :default => false
t.string "content_type"
t.text "content"
t.timestamps
end
add_index("sections", "page_id")
end
def down
drop_table :sections
end
end
这是Section模型:
class Section < ApplicationRecord
belongs_to :page
has_many :section_edits
end
答案 0 :(得分:0)
您的错误来自belongs_to :page
如果尝试使用create!
,应该会看到以下错误消息:
ActiveRecord :: RecordInvalid:验证失败:页面必须存在
只需在您创建的栏目中添加page_id
:
page_id = 1 # or Page.first.id or any page id you need
section = Section.create(name: "Section One", position: 1, page_id: page_id)
答案 1 :(得分:0)
该错误是由以下原因引起的:belongs_to :page
由于page_id
为nil,默认情况下,Rails belongs_to
助手正在添加状态验证以确保关联有效。
要禁用此行为(状态验证),可以使用:
belongs_to :page, optional: true
如此处所述:https://guides.rubyonrails.org/association_basics.html#options-for-belongs-to
或,您可以像其他人提到的那样将page_id
添加到您的Section.create
呼叫中:
page_id = 1 # or Page.first.id or any page id you need
section = Section.create(name: "Section One", position: 1, page_id: page_id)