Вложенная форма Rails не обновляется. strong_params установлены правильно - PullRequest
0 голосов
/ 27 февраля 2020

Вложенная форма (с гемом simple_form) создает запись, но не хочет ее обновлять.

Контрольный список содержит много вопросов. Вопрос относится к одному контрольному списку.

Все сильные параметры установлены.

Итак, в контроллере:

...
  before_action :set_checklist, only: [:show, :edit, :update, :destroy]
...
  def new
    @checklist = Checklist.new
    @checklist.questions.build
  end

  def create
    @checklist = Checklist.new(checklist_params)

    if @checklist.save
      redirect_to checklists_url, notice: 'Checklist was successfully created.' 
...
  def edit
  end

  def update
    if @checklist.update(checklist_params)
      redirect_to @checklist, notice: 'Checklist was successfully updated.'
    else
      render :edit 
    end
  end  
...
  private
    def set_checklist
      @checklist = Checklist.find(params[:id])
    end  

    def checklist_params
      params
        .require(:checklist)
        .permit(:title, :description,
          questions_attributes: Question.attribute_names.map(&:to_sym).push(:_destroy))
    end 

в виде представления:

= simple_form_for(@checklist) do |f|
  = f.error_notification
  .form-inputs
    = f.input :title
    = f.input :description  
...
    %tbody.questions
      = f.simple_fields_for :questions do |builder|
        = render 'question_fields', f: builder
...

в полях _question_:

%tr.nested-fields
  %td
    = link_to_remove_association "remove", f, class: 'btn btn-primary btn-xs' 

  %td
    = f.input :title, label: false
  %td
    = f.input :description, label: false

в модели контрольного списка:

has_many :questions, dependent: :destroy

  accepts_nested_attributes_for :questions, 
          allow_destroy: true, 
          reject_if: proc { |att| att['title'].blank? } 

в модели вопроса:

  belongs_to :checklist, optional: true

Спасибо

1 Ответ

0 голосов
/ 27 февраля 2020
%tr.nested-fields
  %td
    = link_to_remove_association "remove", f, class: 'btn btn-primary btn-xs' 

  %td
    = f.input :title, label: false
  %td
    = f.input :description, label: false

ваш частичный отсутствует = f.hidden_field :id и = f.hidden_field :_destroy

...