Rails 5.0.5 - Данные не сохраняются с помощью 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>
...
1 ответ
Так как вы используете rails 5.0.5, вы должны использовать сильный параметр, чтобы разрешить сохранение поля, а не attr_accessor:parent_id,:content,:title, вы должны удалить attr_accessor и добавить мой пример кода ниже (вы можете добавить другие поля, но убедитесь, что вы добавили parent_id для предка gem) для получения дополнительной информации о сильных параметрах вы можете проверить рельсы сильных параметров
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
- рельсы генерируют миграцию add_ancestry_to_pages родословная: строка
- откройте файл миграции и проверьте поле следующим образом
файл миграции в папке db/migrate
class AddAncestryTopages < ActiveRecord::Migration
def change
add_column :pages, :ancestry, :string
add_index :pages, :ancestry
end
end
- запустить грабли дБ: мигрировать
отредактировано для вашего взгляда
вместо этого, используя коллекцию select, используйте select, вы можете проверить эту ссылку, так как выходные данные 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 является именем, тогда вы можете получить доступ к заголовку родительской страницы с помощью <% = page.parent.name%>, Для получения дополнительной информации, чтобы перейти к вашей записи здесь ссылка, которая вам нужна