Подтвердить что ты не робот

Accepts_nested_attributes_for rails 4 не удаляет

Я читаю и исследую около 3 дней. Это мое последнее средство.

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

Когда я добавляю что-то в текстовое поле и обновляю его, все обновления обновляются должным образом. Если я нажму на флажок, он не удалит поле.

Может кто-то пролить свет на это?

Также я попробовал awesome_nested_fields, но все работает, за исключением удаления фактической записи.

благодарим вас заранее.

EDIT: Решение: (Мне нравится ставить решение в вопрос, если кто-то хочет просмотреть его на мобильном телефоне, поскольку я ненавижу, когда я не вижу решения сразу)

Благодаря @nTraum

def land_params  
    params.require(:land).permit( uploads_attributes: [ :id, :filename, :_destroy ]  )
end

И все будет денди:)

4b9b3361

Ответ 1

Вам нужно разрешить параметр :_destroy для вашей вложенной модели, так как это будет использоваться, когда вы установите флажок "Удалить" в форме. Это способ Rails для отметки экземпляров модели, которые необходимо уничтожить.

def land_params  
  params.require(:land).permit(uploads_attributes: [:id, :filename, :_destroy])
end

Ответ 2

У ОП не было той же проблемы, как у меня, но для всех, кто сталкивался с этим вопросом, для меня это было отсутствие allow_destroy: true в качестве аргумента при вызове accepts_nested_attributes в модели.