Я пытаюсь создать вложенную форму с двумя типами движений: mov_principal и mov_egreso, из которых я пытаюсь сделать это через основное движение
это модели
mov_principal.rb
class MovPrincipal < ActiveRecord::Base
self.table_name = 'mov_principal'
has_one :mov_ingreso, :class_name => 'MovIngreso'
accepts_nested_attributes_for :mov_ingreso
belongs_to :tipo_concepto, :class_name => 'TipoConcepto', :foreign_key => :id_tipo
belongs_to :banco
end
mov_ingreso
class MovIngreso < ActiveRecord::Base
self.table_name = 'mov_ingreso'
belongs_to :mov_principal , :class_name => 'MovPrincipal'
accepts_nested_attributes_for :mov_principal, :allow_destroy => true
has_many :puntos, :class_name => 'Punto'
end
контроллер mov_principal_controller.rb
class MovPrincipalsController < ApplicationController
before_action :set_movprincipal, except: [:index,:new,:create]
before_action :set_tipooper
def index
@mov_principals = MovPrincipal.all.order("referencia DESC")
end
def new
@mov_principal = MovPrincipal.new
if params[:tipooper] == '0'
@mov_ingreso = @mov_principal.build_mov_ingreso
else
# @gastos = Gasto.new
# @mov_egresos = @mov_principal.build_mov_egresos
@mov_egresos = @mov_principal.mov_egresos.build
@gasto = @mov_egresos.build_gasto
end
end
def create
if @tipooper == '0'
@mov_principal = current_user.mov_principals.new(movingreso_params)
else
@mov_principal = current_user.mov_principals.new(movgastos_params)
end
if @mov_principal.save
render :show
else
render :new
end
end
private
def set_movprincipal
@mov_principal = MovPrincipal.find(params[:id])
end
def set_tipooper
@tipooper = params[:tipooper]
end
def movgastos_params
params.require(:mov_principal).permit(:id,:referencia,:id_tipo,:banco_id,
mov_egreso_attributes: [:id,:mov_principal_id,:haber, :gasto_id,
gasto_attributes: [Gasto.attribute_names.map(&:to_sym).push(:_destroy)]] )
end
def movingreso_params
params.require(:mov_principal).permit(:id,:referencia,:id_tipo,:banco_id,:user_id,:_destroy,
mov_ingreso_attributes: [:id,:debe,:mov_principal_id,:_destroy ])
end
end
И представление
_formingreso.html.erb
<%=form_for(@mov_principal, :html => {:class => 'form-horizontal'}) do |f| %>
<% @mov_principal.errors.full_messages.each do |message| %>
<div class="be-red white top-space">
* <%= message %>
</div>
<% end %>
<div class="form-group row">
<label class="col-sm-2 col-form-label"> <%= f.label :referencia, "N° Referencia" %> </label>
<div class="col-sm-10">
<%= f.text_field :referencia, class: 'form-control', placeholder: "N° DE REFERENCIA" %>
</div>
</div>
<div class="form-group row" >
<label class="col-sm-2 col-form-label"> <%= f.label :id_tipo, "Tipo" %> </label>
<div class="col-sm-10">
<%= f.collection_select(:id_tipo, TipoConcepto.where(:forma => "1"), :id, :tipo,{:prompt => "SELECCIONE EL TIPO DE INGRESO"}, {class: 'custom-select'}) %>
</div>
</div>
<div class="form-group row" >
<label class="col-sm-2 col-form-label"> <%= f.label :id_banco, "Banco" %> </label>
<div class="col-sm-10">
<%= f.collection_select(:banco_id, Banco.all, :id, :nombre,{:prompt =>"SELECCIONE EL BANCO"} ,{class: 'custom-select'} ) %>
</div>
</div>
<div class="form-group row" >
<%= f.fields_for :mov_ingreso_attributes do |ingreso| %>
<label class="col-sm-2 col-form-label"> <%= ingreso.label :debe, "Monto" %> </label>
<div class="col-sm-10">
<%= ingreso.text_field :debe, class: 'form-control' , placeholder: "MONTO DE INGRESO" %>
</div>
<% end %>
Страница загружает меня, это сохраняет меня данные mov_principal, но не сохраняет меня данные mov_ingreso, и я обнаружил в консоли ошибку Unpermitted: бла-бла-бла У меня есть часы, которые я искал и искал на форумах, пытаясь найти решения, и даже читал в блоге об ошибке, которая имеет рельсы при обновлении версии, и мне пришлось создать инициализатор strong_parameter, я сделал это, и в любом случае ничего не показываю здесь, только в дело имеет какое-либо отношение
/ initializers / strong_parameter.rb
if Rails.env.test?
ActionController::Parameters.action_on_unpermitted_parameters = :raise
end
Спасибо всем! !