params.require(:user).permit(:name, fee_attributes: %i[id fee_hour fee_month], user_class_attributes: %i[id class_detail [id class_name class_category]])
Это означает, что вы хотите обновить class_detail из user_class, но вам нужно определить вложенные атрибуты :
class UserClass < ApplicationRecord
belongs_to :user
belongs_to :class_details
accepts_nested_attributes_for :class_details, update_only: true
validates_presence_of :user_id
end
Кроме того, форма должна выглядеть следующим образом:
<%= form_for(@user, url: {action: 'update_profile'}, html: {class: 'm-form m-form--fit m-form--label-align-right'}) do |f| %>
<%= f.fields_for :fee, @user.fee do |u| %>
<%= u.number_field :fee_hour, class: 'form-control m-input', placeholder: t('.fee_for_hour') %>
<% end %>
<%= f.fields_for :user_class, @user.user_class do |k| %>
<%= k.fields_for :class_detail, @user.user_class.class_detail do |c| %>
<%= c.text_field :class_name, class: 'form-control m-input' %>
<% end %>
<% end %>
<% end %>
А в вашем контроллере:
def user_params
params.require(:user).permit(:name, fee_attributes: %i[id fee_hour fee_month], user_class_attributes: [:id, { class_detail: %i[class_name class_category] }])
end
Отредактировано:
Все это означает, что class_details и user_class уже связаны с пользователем,Создать модель ссылок - child-child-model - child-parent-model из одного вызова невозможно.Вы можете создать эти ссылки в действии редактирования.Например:
def edit
@user.create_user_class!(class_detail: ClassDetail.find(n)) unless @user.user_class
end