Я не могу получить рельсы для обновления моих вложенных атрибутов, хотя обычные атрибуты работают нормально.Это моя структура:
unit.rb:
class Unit < ApplicationRecord
has_many :unit_skill_lists
has_many :skill_lists, through: :unit_skill_lists, inverse_of: :units, autosave: true
accepts_nested_attributes_for :skill_lists, reject_if: :all_blank, allow_destroy: true
end
unit_skill_list.rb:
class UnitSkillList < ApplicationRecord
belongs_to :unit
belongs_to :skill_list
end
skill_list.rb:
class SkillList < ApplicationRecord
has_many :unit_skill_lists
has_many :units, through: :unit_skill_lists, inverse_of: :skill_lists
end
И это (часть) контроллера:
class UnitsController < ApplicationController
def update
@unit = Unit.find(params[:id])
if @unit.update(unit_params)
redirect_to edit_unit_path(@unit), notice: "Unit updated"
else
redirect_to edit_unit_path(@unit), alert: "Unit update failed"
end
end
private
def unit_params
unit_params = params.require(:unit).permit(
...
skill_list_attributes: [:id, :name, :_destroy]
)
unit_params
end
end
Соответствующие строки в форме (используя formtastic и кокон):
<%= label_tag :skill_lists %>
<%= f.input :skill_lists, :as => :check_boxes, collection: SkillList.where(skill_list_type: :base), class: "inline" %>
Есть идеи, где я иду не так?Я пытался следовать всем руководствам, которые мог найти, но обновление ничего не делает для вложенных атрибутов.
Редактировать после справки от Василисы:
Это ошибка, когда я пытаюсь обновить модуль:
ActiveRecord::RecordInvalid (Validation failed: Database must exist):
Это полный unit_skill_list.rb:
class UnitSkillList < ApplicationRecord
belongs_to :unit
belongs_to :skill_list
belongs_to :database
end
Нет поля ввода для "базы данных".Предполагается, что он устанавливается из переменной сеанса при обновлении модуля.