Невозможно редактировать существующие поля с помощью acceptpts_nested_attributes_for
У меня есть @pitch
тот accepts_nested_attributes_for
для функций. Я хочу быть в состоянии edit
а также add
features
на странице редактирования @pitch
(Я использую form_for
).
Я пробовал так много похожих примеров / руководств и тестов, и мой код кажется правильным, но я, вероятно, создал для себя слепую зону, потому что она не работает:
current features
показаны и new field
Показано. Я могу добавить new feature
, но когда я пытаюсь edit a current feature
то не сохраняется в database
,
pitch.rb
class Pitch < ApplicationRecord
...
has_many :features
accepts_nested_attributes_for :features, :allow_destroy => true, reject_if: :all_blank
...
end
pitches_controller.rb
class PitchesController < ApplicationController
before_action :authenticate_user!
...
def edit
@pitch = Pitch.find params[:id]
@pitch.features.build
end
def update
@pitch = Pitch.find params[:id]
if @pitch.update pitch_attributes
redirect_to [:edit, @pitch]
else
render "edit"
end
end
...
private
def pitch_attributes
params.require(:pitch).permit(:name, :summary, :user_id, :pitchtype_ids => [], features_attributes: [:name, :description, :priority, :id])
end
end
edit.html.slim (упрощенный)
= form_for @pitch do |f|
...
h4
| Step 4/5
= f.fields_for :features do |feature_forms|
.form-group
.input-group
span.input-group-addon
i.glyphicon.glyphicon-th-list
= feature_forms.text_field :name, :placeholder => 'Describe a new feature', :class => 'form-control', :onchange => "this.form.submit();"
#pitch_features.input-group-addon
= feature_forms.select :priority, Feature.priorities.keys, :input_html => {:onchange => "this.form.submit();"}
...
Есть мысли о том, что мне не хватает?
Как просили:
Parameters: {"utf8"=>"✓", "authenticity_token"=>"lwXv3PX7uKaHaCpm7jh6YAjqTQNsAgM2h8sy5Hq5vRWw9CQBSguXDO+2+LISCtJ66OT37RbgcmFxAnVK5SBj2A==", "pitch"=>{"name"=>"Remco's pitch blablabla and see what happend", "summary"=>"An add a proper description and something else An add a proper description and something else An add a proper description and something else", "pitchtype_ids"=>["", "1", "2"], "features_attributes"=>{"0"=>{"name"=>"A button to call Remco for getting a beer and some wines", "priority"=>"high", "id"=>"2"}, "1"=>{"name"=>"test2test", "priority"=>"low", "id"=>"23"}, "2"=>{"name"=>"en nog iets anders", "priority"=>"low", "id"=>"25"}, "3"=>{"name"=>"tester van een ander soort", "priority"=>"low", "id"=>"22"}, "4"=>{"name"=>"blaatert", "priority"=>"high", "id"=>"24"}, "5"=>{"name"=>"Alicia", "priority"=>"low", "id"=>"27"}, "6"=>{"name"=>"test 12", "priority"=>"low", "id"=>"26"}, "7"=>{"name"=>"test5", "priority"=>"low", "id"=>"28"}, "8"=>{"name"=>"groepsedingen", "priority"=>"low", "id"=>"29"}, "9"=>{"name"=>"bobbels", "priority"=>"low", "id"=>"30"}, "10"=>{"name"=>"test duizend en nog", "priority"=>"low", "id"=>"32"}, "11"=>{"name"=>"fraat", "priority"=>"low", "id"=>"33"}, "12"=>{"name"=>"nog iets dan toch", "priority"=>"low", "id"=>"34"}, "13"=>{"name"=>"groetenen", "priority"=>"low", "id"=>"35"}, "14"=>{"name"=>"baas", "priority"=>"low", "id"=>"36"}, "15"=>{"name"=>"test zoveel als mogeleijk", "priority"=>"low", "id"=>"31"}, "16"=>{"name"=>"en nu dan? nog iets?", "priority"=>"low", "id"=>"37"}, "17"=>{"name"=>"", "priority"=>"low"}}}, "id"=>"7"}
Обновить:
Путем дальнейшего тестирования я нашел кое-что интересное: если я просто изменю текущее поле, то ничего не будет отправлено. Но если после этого действия я добавлю новую функцию, то более раннее изменение также будет отправлено.
Встроенный JS перемещен во внешние файлы:
Исходя из замечаний @max, я заменил встроенный javascript на делегированный обработчик событий (jQuery) во внешнем файле een. Все по-прежнему работает, но с тем же результатом... Вот мой jQuery-код:
// Pitch name is being submitted
$('.edit_pitch').on('change', 'input' || 'select', function( event ) {
$('.edit_pitch').submit();
});