我有一个拥有图库模型和资产模型的照片库。见下文:
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
我可以通过我的Gallery表单销毁资产,但是当我尝试销毁Gallery本身时,我只是被重定向到Show视图而没有确认通知。
这是我的表格:
<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>
我正在使用使用scaffold创建的标准destroy方法:
def destroy
@gallery = Gallery.find(params[:id])
@gallery.destroy
respond_to do |format|
format.html { redirect_to(galleries_url) }
format.xml { head :ok }
end
我需要对模型进行一些更改吗?破坏方法?还要别的吗?为了能够删除嵌套模型的父级?
提前感谢您的见解。 有什么想法吗?
答案 0 :(得分:1)
听起来JavaScript加载的支持方式有问题。没有办法让一个锚直接发出DELETE请求,所以Rails使用JavaScript来响应链接的click事件,然后发出正确的请求。没有它,链接只是充当GET。
答案 1 :(得分:0)
我在另一个网站上发现了这个讨论,它描述了我面临的情况:
http://railsforum.com/viewtopic.php?id=38460
建议使用button_to而不是标准link_to来防止Web机器人的安全。我之前没有听说过。
还观察到缺少&lt;%= csrf_meta_tag%&gt;被发现,原始问题消失了,link_to工作了。对我来说情况并非如此。
所以现在我有了一个button_for并且能够销毁记录。但是,我没有收到确认通知(:确认)。所以仍然有问题,但我至少可以处理删除记录的需要。
答案 2 :(得分:0)
我现在能够获得确认通知(:确认)。我所做的是改变了javascript_include_tag:默认为javascript_include_tag:全部。我忘了我做了那个改变。我不确定在调用:defaults方法时包含什么,但只是想让其他任何人遇到这个问题知道我是如何修复它的。听起来像使用Button_to而不是Link_to仍然是最好的解决方案,即使link_to现在可以正常工作。