0

这里严重没有加起来..我的页面只是刷新,没有任何反应,它从来没有触及我的任何调试器,除了索引之外,我所有的方法都挂着。

我的html:

<%- for image in @images %>
  <%= image.attachment_file_name %>

  <%-# link_to_delete image, :url => destroy_image_admin_wysiwyg_path(image.id) %>
  <%= link_to 'delete', { :url => destroy_image_image_path(image.id) },
        #:confirm => 'Are you sure?',
        :post => true
     %>

  <br />
<% end %>

我的控制器

def destroy_image
  debugger
  @img = Image.find(params[:id])
  @img.destroy
  respond_to do |format|
    format.html { redirect_to admin_image_rotator_path }
  end
end

我的路线:

map.resources :images, :member => { :destroy_image => :post }

我的令人作呕的 hack 很有效,一旦我找到更好的东西,我会立即更换

我将动作转移到我自己构建的更简单的控制器上。

将我的路线更改为:

admin.resources :wysiwygs, :member => { :destroy_image => :post }

改变了我的 html :

<%= link_to 'delete', :controller => "wysiwygs", :action => "destroy_image" %>

但是当我点击链接时..它带来了..show动作?? fffffffffuuuuuu

作为报复,我只是将我的操作移到了显示操作,并在我的 html 中传递了一个隐藏字段。

<%= link_to 'delete', :controller => "wysiwygs", :action => "destroy_image", :hidden_field => {:value =>  image.id} %>

  def show
    # this was previously in destroy_image
    @img = Image.find(params[:hidden_field][:value])
    @img.destroy
    respond_to do |format|
      format.html { redirect_to admin_image_rotator_path }
    end
  end
4

3 回答 3

3

看来你在这里走错了路。如果 abefore_filter阻止了您的操作,请找出原因skip_before_filter :filter_name如果不需要过滤器,请使用。

不要使用show操作或 HTTP GET 进行删除。即使它有效,它也会让事情变得混乱。使用 DELETE 动词:

map.resources :images, :member => { :destroy_image => :delete }

在链接助手中传递它:

<%= link_to "delete", destroy_image_image_path(image), :method => :delete %>

并用于ImagesController#destroy_image执行动作。ImagesController#destroy更好的是,考虑使用免费提供的标准 RESTful map.resources

于 2010-12-07T00:41:02.020 回答
1

首先不知道出了什么问题,但是在您的第二个可行的解决方案中,我认为您应该link_to如下编写:

link_to 'delete', :controller => "wysiwygs", :action => "destroy_image", :id => image.id    

这至少会让你采取正确的行动。根据您的路线,您必须将其设为method => :post或不设为。检查你的rake routes输出,它会告诉你什么是可能的路线,以及他们得到的名字,然后你可以将其用作方法(添加_path_url在末尾)。那么写这样的东西应该更容易:

link_to 'delete', wysiwygs_destroy_image_path(image)

祝你好运!

于 2010-12-06T23:02:07.850 回答
0

您正在执行 POST,但您的资源说 :destroy_image 只能通过 GET 获得。尝试将您的路线更改为:

map.resources :images, :member => { :destroy_image => :post }

另外,看看你的link_to. 第二个参数采用 URL,而不是具有 :url 键的散列。如其他地方所述,根据您的 Rails 版本,您可能需要:method => :post而不是:post => true. 在 Rails 2.3.8 中,您可能需要这一行:

<%= link_to 'delete', destroy_image_image_path(image), :method => :post %>
于 2010-12-06T19:53:17.323 回答