web-dev-qa-db-ja.com

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 実際のレコードを削除する以外はすべて機能します。

前もって感謝します。

編集:解決策:(私がすぐに解決策を見ることができないときに嫌いなので、誰かがモバイルでそれを表示したい場合に備えて、質問に解決策を入れたいです)

@nTraumに感謝

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

そして、すべてはダンディになります:)

29
Mr H

ネストされたモデルの:_destroyパラメータも許可する必要があります。これは、フォームの[削除]チェックボックスをオンにするときに使用されるためです。破棄する必要があるモデルインスタンスにフラグを立てるのはRailsの方法です。

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

OPには私と同じ問題はありませんでしたが、この質問に出くわした人にとって、私にとってはallow_destroy: trueの引数としてaccepts_nested_attributesモデルで呼び出します。

12
IanBussieres