Rails 5.0.5 - 不使用 Ancestry 保存数据 Gem

Rails 5.0.5 - Data not saving using Ancestry Gem

我正在使用 Ancestry Gem 为我的 Page 模型构建树。页面保存但字段数据未保存到数据库中。我没有看到任何错误,因为我是 Rails 的新手,所以我不确定如何调试。下面是我的代码。谢谢。

页面模型

class Page < ApplicationRecord
  attr_accessor :parent_id, :content, :title

  has_ancestry
end

页面控制器 - def create

def create
    @page = Page.new(page_params)

    respond_to do |format|
      if @page.save
        format.html { redirect_to @page, notice: 'Page was successfully created.' }
        format.json { render :show, status: :created, location: @page }
      else
        format.html { render :new }
        format.json { render json: @page.errors, status: :unprocessable_entity }
      end
    end
  end

_form.html.erb

...
<div class="field">
  <%= f.label :parent_id %>
  <%= f.collection_select :parent_id, Page.order(:title), :id, :title, include_blank: true %>
</div>
...

因为你使用 rails 5.0.5 那么你必须使用强参数来允许字段被保存而不是 attr_accessor :parent_id, :content, :title 你应该删除 attr_accessor 并在下面添加我的示例代码(你可以添加其他字段但确保你添加了 parent_id for ancestry gem) 有关强参数的更多信息,您可以查看 strong parameter rails

page_controller

class PagesController < ApplicationController

# your create method here

private

    def page_params
      params.require(:page).permit(
        :title,
        :your_other_field,
        :parent_id)
    end

end

已针对血统字段进行编辑

根据您的信息,您已经添加了脚手架 parent_id 字段,请尝试检查它并在下面为您添加 parent_id

的参考步骤
  • rails 生成迁移 add_ancestry_to_pages ancestry:string
  • 打开您的迁移文件并检查字段如下

文件夹内的迁移文件db/migrate

  class AddAncestryTopages < ActiveRecord::Migration
    def change
      add_column :pages, :ancestry, :string
      add_index  :pages, :ancestry
    end
  end
  • 运行 耙子 db:migrate

为您的观点编辑

而不是使用 collection select 请使用 select,您可以检查它 this link 因为 collection_select 输出是一个数组并且与 parent_id 对于刚刚收到一个 parent

的祖先
<%= f.select :parent_id, Page.order(:title).collect {|p| [ p.title, p.id ] }, { include_blank: true } %>

编辑访问 parent

如果您想从 child 祖先记录中访问 parent,您可以使用 object.parent.column_name 访问它,考虑您的 column_name 是名称,那么您可以使用 <%= page.parent.name %> 访问 parent 页面的标题,以获取有关 navigate your record here is link that you need 的更多信息