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 }

より良いものを見つけたらすぐに交換する私の嫌なハック

アクションを、自分で作成したより単純なコントローラーに移動しました。

ルートを次のように変更しました:

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

私のhtmlを変更しました:

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

しかし、リンクをクリックすると..showアクションが表示されました?? フフフフフフゥゥゥゥゥゥゥ

アクションを show アクションに移動し、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

そもそも何が間違っていたのかわかりませんが、2番目の実用的なソリューションでは、次のように書く必要があると思いますlink_to:

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

それは少なくともあなたを正しい行動に導くでしょう。ルートによっては、これを a にする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。2 番目のパラメーターは、: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 に答える