2012-01-02 102 views
0

我有一個圖庫,它有一個圖庫模型和一個資產模型。請看下圖:accepted_nested_attributes_for - 防止破壞主模型?

class Gallery < ActiveRecord::Base 
    attr_accessible :gallery_name, :description, :assets_attributes 
    has_many :assets, :dependent => :destroy 
    accepts_nested_attributes_for :assets, :allow_destroy => true 

    def find_featured_image 
    assets.featured 
    end 

    def find_only_featured 
    assets.only_featured 
    end 


class Asset < ActiveRecord::Base 
    belongs_to :gallery 

    has_attached_file :image, 
    :styles => { 
     :thumb => '150x150#', 
     :medium => '300x300>', 
     :large => '600x600>' 
    } 

    def self.featured 
    where(:featured => true).limit(1) 
    end 

    scope :only_featured, where(:featured => true) 

end 
end 

我可以通過我的畫廊形式摧毀資產,但是當我試圖摧毀畫廊本身,我只是重定向到沒有確認通知顯示視圖。

這裏是我的形式:

<div id="gallery"> 
    <div class="headers"><h1>MDN Photo Gallery</h1></div></br> 

    <% @galleries.each do |gallery| %> 

    <div id="gallery_wrap"> 
     <div id="gallery_left"> 
      <div id="gallery_head"><h2><%= gallery.gallery_name %></h2></div> 
      <div id="gallery_desc"><%= gallery.description %></div> 
     </div> 
     <div id="gallery_rt"> 
      <div id="gallery_featured"> 
       <% for asset in gallery.assets.featured %> 
        <%= link_to(image_tag(asset.image.url(:medium)), asset.image.url(:large), :class => "fancybox", :rel => gallery.id) %> 
       <% end %> 
      </div> 
      <div id="gallery_photos"> 
      <% for asset in gallery.assets %> 
       <%= link_to(image_tag(asset.image.url(:thumb)), asset.image.url(:large), :class => "fancybox", :rel => gallery.id) %> 
      <% end %> 
      </div> 
      <td><%= link_to 'Show', gallery %></td> 
      <td><%= link_to 'Edit', edit_gallery_path(gallery) %></td> 
      <td><%= link_to 'Destroy', gallery, :confirm => 'Are you sure?', :method => :delete %></td> 
     </div> 
    </div> 
    </br> 
    <% end %> 
    <br /> 
<%= link_to 'New Gallery', new_gallery_path %> 
</div> 

我使用的是標準摧毀獲取與支架創建方法:

def destroy 
@gallery = Gallery.find(params[:id]) 
@gallery.destroy 

respond_to do |format| 
    format.html { redirect_to(galleries_url) } 
    format.xml { head :ok } 
end 

有一些變化,我需要做的模型?摧毀方法?還要別的嗎?爲了能夠刪除嵌套模型的父親?

預先感謝您的見解。 任何想法?

回答

1

這聽起來有一些錯誤的JavaScript支持是如何被加載。沒有辦法讓錨點直接創建DELETE請求,所以Rails使用JavaScript來響應鏈接的點擊事件,然後做出正確的請求。沒有這一點,鏈接只是作爲一個GET。

+0

你碰巧知道rails中的哪個.js庫對此負責?也許JavaScript的加載順序與此有關。 – 2012-01-03 23:37:41

+0

您正在使用哪個版本的Rails?如果在3.1之前,您是否安裝了jQuery支持,或者您是否使用默認的Prototype支持? – 2012-01-05 07:01:31

+0

我正在使用v3.0.3。我不熟悉需要安裝JQuery支持。我將JQuery添加到默認的Prototype支持。你有鏈接,你可以參考我?謝謝! – 2012-01-06 14:05:07

0

我發現,精確地描述了我面臨的情況在其他網站上的討論:

http://railsforum.com/viewtopic.php?id=38460

的建議是爲了使用button_to而不是標準的link_to的用於安全目的對網絡機器人。我以前沒有聽說過。

此外,據觀察發現缺少<%= csrf_meta_tag%>並且原始問題消失,link_to工作。對我來說並非如此。

所以現在我有一個button_for和我能夠摧毀紀錄。但是,我沒有收到確認通知(:確認)。所以還是有問題,但我至少可以處理刪除記錄的需要。

0

我現在能夠得到確認通知工作(:確認)。我所做的改變了javascript_include_tag:默認爲javascript_include_tag:全部。我忘記了我做了這個改變。我不確定在調用:defaults方法時包含了什麼,但只是想讓其他人知道我是如何修復它的。聽起來像使用Button_to而不是Link_to仍然是最好的解決方案,即使link_to現在可以工作。