无法在Rails 5中插入MySQL查询(Lynda课程)

时间:2018-08-29 12:56:00

标签: ruby-on-rails-5

我正在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

2 个答案:

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