2013-11-21 25 views
25

Şu anda yaklaşık 3 gün boyunca okumakta ve araştırmaktayım. Bu benim son başvurum.accepts_nested_attributes_for raylar 4 silinmiyor

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 

Metin alanına bir şey eklediğimde ve güncellediğimde, tüm güncelleştirmeler düzgün şekilde güncelleştirildi. Onay kutusunu tıklarsam alanı kaldırmaz.

Birisi buna ışık tutabilir mi?

Ayrıca, gerçek kaydı kaldırmak dışında awesome_nested_fields çalıştım.

şimdiden teşekkür ederiz.

DÜZENLEME: Çözüm: @nTraum

için

Teşekkür (Birisi nefret gibi ben hemen çözüm göremiyorum zaman mobil görüntülemek için istemesi halinde, söz konusu çözüm koymak ister)

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

Ve tüm züppe olacak :)

Bu forma 'Sil' onay kutusunu işaretleyin kullanılan alır gibi, hem de sizin iç içe modeli için :_destroy parametreyi izin vermelisiniz
+1

Aynı sorun vardı ama benim durumumda: id alanını atlıyordum. Daha sonra, yuvalanmış bir modeli silmek istiyorsanız, aşağıdakilere izin vermeniz gerekir: iç içe geçmiş modelin id ve: _detroy nitelikleri. –

cevap

46

. Rails'in yok edilmesi gereken model örneklerini işaretleme şekli.

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

Ben SEVGİ SEVİYORUM SÖYLÜYORUM. Bu kanlıydı. Tekrar teşekkürler :). –

+6

Sadece bir not: id ve: _destroy params gereklidir, bunu ekledikten sonra şunu buldum: destory – Eric

+0

@nTraum – Shiko

6

OP benimle aynı sorunu yoktu, ama herkes benim için bu soruya genelinde gelecek için, bu modelde accepts_nested_attributes çağrı bağımsız değişken olarak allow_destroy: true yokluğu idi.

+0

için büyük teşekkürler bu belgelerde daha iyi vurgulanmalıdır – retroGiant