Я работаю над CRUD с 3 моделями и acceptpts_nested_attributes_for, я пытаюсь сохранить на bd запись модели loan_policy и в таблице соединений, кроме соответствующих идентификаторов и идентификатора сохраненной модели, которая является process_flow a столбец с именем поведение, но я не могу понять, как это сделать, правильно.
У меня уже есть 3 модели, в которых, кроме того, несмотря на правильное отображение информации, я не могу правильно сохранить в bd, имея в виду, что модель process_flow уже имеет значения в bd.
Модели
class LoanPolicy < ApplicationRecord
has_many :loan_policy_process_flows
has_many :process_flows, through: :loan_policy_process_flows
accepts_nested_attributes_for :loan_policy_process_flows
end
class ProcessFlow < ApplicationRecord
has_many :loan_policy_process_flows
has_many :loan_policies, through: :loan_policy_process_flows
end
class LoanPolicyProcessFlow < ApplicationRecord
belongs_to :loan_policy
belongs_to :process_flow
end
Контроллер
def new
@loan_policy = LoanPolicy.new
end
def create
@loan_policy = LoanPolicy.new(loan_policy_params)
if @loan_policy.save!
flash[:success] = 'Política Creada con Exito'
redirect_to loan_policies_path
else
flash[:danger] = "Política No Creada"
redirecto_to new_loan_policy_path
end
end
def loan_policy_params
params.require(:loan_policy).permit(
:name,
:description,
:legal_document_id,
:status,
:minimun_range,
:maximun_range,
:minimun_days,
:maximun_days,
:monthly_interest_rate,
:external_bureau_required,
:credit_bureau_id,
loan_policy_process_flows_attributes: [:process_flow_id, :behavior])
end
_form.html.erb
<%= form_with(model: loan_policy, local: true) do |form| %>
....
<% ProcessFlow.all.each_with_index do |process_flow, i| %>
<% if i == 0 %>
<div class="col-5 col-md-5"><label class="control-label">Proceso</label></div>
<div class="col-6 col-md-6"><label class="control-label">Comportamiento</label></div>
<br>
<div class="col-5 col-md-5">
<%= check_box_tag "loan_policy[loan_policy_process_flows_attributes][][process_flow_id]", process_flow.id, @loan_policy.process_flow_ids.include?(process_flow.id), id: dom_id(process_flow) %>
<%= label_tag dom_id(process_flow), process_flow.process_description %>
</div>
<div class="col-6 col-md-6">
<%= select_tag "loan_policy[loan_policy_process_flows_attributes][][behavior]", options_for_select([['Seleccione Comportamiento', nil], ['Manual', 'Manual'], ['Automático', 'Automático']], selected: "loan_policy[process_flow_ids][behavior]" ), class: 'form-control', id: "process_flow_select_picker_"+dom_id(process_flow)%>
</div>
<% else %>
<br>
<div class="col-5 col-md-5">
<%= check_box_tag "loan_policy[loan_policy_process_flows_attributes][][process_flow_id]", process_flow.id, @loan_policy.process_flow_ids.include?(process_flow.id), id: dom_id(process_flow), class: 'check_input' %>
<%= label_tag dom_id(process_flow), process_flow.process_description %>
</div>
<div class="col-6 col-md-6">
<%= select_tag "loan_policy[loan_policy_process_flows_attributes][][behavior]", options_for_select([['Seleccione Comportamiento', nil], ['Manual', 'Manual'], ['Automático', 'Automático']], selected: "loan_policy[process_flow_ids][behavior]" ), class: 'form-control', id: "process_flow_select_picker_"+dom_id(process_flow)%>
</div>
<% end %>
<% end %>
<% end %>
Параметры, которые отправляются:
Parameters: {"utf8"=>"✓", "authenticity_token"=>"9qK5ay2oFK86UgZ3srzR5tYG6JOCK8BQRkjpWOJG+4NYQ+A+fKI6UB29GLi9e8xlVEFho5Od6DB71QJWRzRa5g==", "loan_policy"=>{"name"=>"Policita 2", "status"=>"true", "legal_document_id"=>"4", "minimun_range"=>"120", "maximun_range"=>"2200", "minimun_days"=>"25", "maximun_days"=>"60", "monthly_interest_rate"=>"0.3", "credit_bureau_id"=>"3", "external_bureau_required"=>"Si", "loan_policy_process_flows_attributes"=>[{"process_flow_id"=>"1", "behavior"=>"Manual"}, {"behavior"=>"", "process_flow_id"=>"3"}, {"behavior"=>"Automático"}, {"behavior"=>"", "process_flow_id"=>"5"}, {"behavior"=>"Manual"}, {"behavior"=>""}, {"behavior"=>""}]}, "commit"=>"Continuar"}
Ошибка
Validation failed: Loan policy process flows process flow must exist
то, что я также хотел бы сделать в loan_policy_process_flows_attributes, было бы хэшем с выбранными идентификаторами и поведением соответствующего выбора.
Спасибо.