我正在使用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>
...
答案 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
文件夹db / migrate中的迁移文件
class AddAncestryTopages < ActiveRecord::Migration
def change
add_column :pages, :ancestry, :string
add_index :pages, :ancestry
end
end
使用集合选择请使用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的更多信息