rails form_with form_for form for example ruby-on-rails ruby ruby-on-rails-4

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