Rails 5.0.5 - 使用Ancestry Gem保存数据

时间:2017-08-27 06:09:19

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

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

页面模型

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

  has_ancestry
end

页面控制器 - def创建

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

1 个答案:

答案 0 :(得分:1)

因为你使用rails 5.0.5然后你必须使用强参数来保存字段而不是attr_accessor:parent_id,:content,:title 你应该删除attr_accessor并在下面添加我的示例代码(你可以添加其他字段,但要确保为ancestry gem添加了parent_id) 有关强参数的详细信息,您可以查看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

为祖先字段编辑

作为您的信息中的信息,您已添加了scaffold 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
  • 运行rake db:migrate

为您的观点编辑

使用集合选择请使用select,你可以检查它this link因为collection_select输出是一个数组,并且与刚刚接收一个父级的祖先的parent_id不匹配

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

已为访问父级

进行了编辑

如果您想从祖先的子记录中访问父级,可以使用 object.parent.column_name 访问它,请考虑您的column_name是名称,然后您可以使用<访问父页面的标题strong>&lt;%= page.parent.name%&gt; ,有关navigate your record here is link that you need的更多信息