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%>, Для получения дополнительной информации, чтобы перейти к вашей записи здесь ссылка, которая вам нужна

Другие вопросы по тегам