2012-01-02 4 views
0

갤러리 모델과 애셋 모델이있는 사진 갤러리가 있습니다.accepts_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 

내가 내 갤러리 양식을 통해 자산을 파괴 할 수 있어요,하지만 난 갤러리 자체를 파괴 할 때, 나는 단순히 아무 확인 통지 표시보기로 리디렉션 오전 : 아래를 참조하십시오.

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

respond_to do |format| 
    format.html { redirect_to(galleries_url) } 
    format.xml { head :ok } 
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> 

: 여기

은 내 양식입니까? 파괴 방법? 다른 것? 중첩 모델의 부모를 삭제할 수 있으려면?

미리 감사드립니다. 아이디어가 있으십니까?

답변

1

JavaScript 지원 기능이로드되는 방식에 문제가있는 것 같습니다. 앵커가 직접 DELETE 요청을하는 방법은 없기 때문에 레일스는 JavaScript를 사용하여 링크의 클릭 이벤트에 응답 한 다음 적절한 요청을합니다. 그것 없이는 링크는 단순히 GET의 역할을합니다.

+0

레일스의 .js 라이브러리가 이것을 담당하고 있는지 알고 계십니까? 아마도 javascript의로드 순서에는 이와 관련이 있습니다. –

+0

어떤 레일 버전을 사용하고 있습니까? 3.1 이전에 jQuery 지원을 설치했거나 기본 프로토 타입 지원을 사용하고 있습니까? –

+0

v3.0.3을 사용 중입니다. JQuery 지원을 설치할 필요가 없다. 기본 Prototype 지원에 JQuery를 추가했습니다. 나를 연결할 수있는 링크가 있습니까? 감사! –

0

내가 직면하고있어 정확하게 상황을 설명 다른 사이트에서이 토론 발견

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

권장 웹에 대한 보안 목적으로 표준 LINK_TO 대신 button_to을 사용하려고했습니다를 봇. 전에는 그 말을 듣지 못했습니다.

또한, < % = csrf_meta_tag %>가 없으며 원래의 문제가 사라지고 link_to가 작동한다는 것이 관찰되었습니다. 그건 나를위한 것이 아닙니다.

이제는 button_for가 있으며 레코드를 삭제할 수 있습니다. 그러나 확인 통지 (: 확인)가 표시되지 않습니다. 그래서 여전히 잘못된 것이 있습니다.하지만 적어도 기록을 삭제해야 할 필요는 있습니다.

0

이제 확인 알림을받을 수 있습니다 (: 확인). 내가 한 일은 javascript_include_tag : javascript_include_tag : default로 변경되었습니다. 나는 그 변화를 잊어 버렸다. : defaults 메소드가 호출되었을 때 어떤 것이 포함되어 있는지 모르겠다.하지만이 문제를 다루는 다른 누군가가 내가 그것을 고쳤다는 것을 알리고 싶었다. Link_to 대신 Button_to를 사용하는 것과 같은 소리는 link_to가 작동하더라도 여전히 최상의 솔루션입니다.

관련 문제