ruby on rails - form_with - accepts_nested_attributes_for rails 4 no está eliminando
select in ruby on rails (2)
He estado leyendo e investigando durante aproximadamente 3 días. Este es mi ultimo recurso.
land.rb:
has_many :uploads , :dependent => :destroy
accepts_nested_attributes_for :uploads, :allow_destroy => true,:reject_if => :all_blank
upload.rb
belongs_to :land
_land_form_partial.html.erb
<%= form_for land , :html => {:multipart => true} do |f| %>
<%= f.fields_for :uploads do |builder| %>
<div class="land_fields">
<%= builder.label :filename, "Image" %>
<%= builder.text_field :filename %> <br/>
Delete: <%= builder.check_box :_destroy %>
</div>
<% end %>
#... buttons and other fields
<% end %>
lands_controller.rb
def update
if @land.update_attributes(land_params)
flash[:success] = "Land updated"
redirect_to lands_path
else
flash[:alert] = @land.errors.full_messages.first
redirect_to edit_land_path
end
end
def land_params
params.require(:land).permit( uploads_attributes: [ :id, :filename ] )
end
Cuando agrego algo al campo de texto y lo actualizo, todas las actualizaciones se realizan correctamente. Si hago clic en la casilla de verificación, no eliminará el campo.
Por favor alguien puede arrojar luz sobre esto?
También probé awesome_nested_fields pero todo funciona, excepto para eliminar el registro real.
gracias de antemano.
EDITAR: Solución: (Me gusta poner la solución en la pregunta en caso de que alguien quiera verla en un dispositivo móvil, ya que odio cuando no puedo ver la solución de inmediato)
Gracias a @nTraum
def land_params
params.require(:land).permit( uploads_attributes: [ :id, :filename, :_destroy ] )
end
Y todo será excelente :)
El OP no tenía el mismo problema que yo, pero para cualquiera que se haya allow_destroy: true
con esta pregunta, para mí, era la ausencia de allow_destroy: true
como argumento en la llamada accepts_nested_attributes
en el modelo.
También debe permitir el parámetro :_destroy
para su modelo anidado, ya que esto se usa cuando :_destroy
la casilla de verificación ''Eliminar'' en el formulario. Es la forma en que Rails marca las instancias del modelo que deben destruirse.
def land_params
params.require(:land).permit(uploads_attributes: [:id, :filename, :_destroy])
end