0

レコードを破棄する正しい方法を見つけることができません。私はそのような完全な初心者のように感じます。

コントローラーに関連するルートは次のrake routesとおりです ( からの出力)。

    contents GET    /admin/contents(.:format)                   {:controller=>"contents", :action=>"index"}
    contents POST   /admin/contents(.:format)                   {:controller=>"contents", :action=>"create"}
 new_content GET    /admin/contents/new(.:format)               {:controller=>"contents", :action=>"new"}
edit_content GET    /admin/contents/:id/edit(.:format)          {:controller=>"contents", :action=>"edit"}
     content GET    /admin/contents/:id(.:format)               {:controller=>"contents", :action=>"show"}
     content PUT    /admin/contents/:id(.:format)               {:controller=>"contents", :action=>"update"}
     content DELETE /admin/contents/:id(.:format)               {:controller=>"contents", :action=>"destroy"}

私が得ているのは、要するに、get and put と何の違いもないように見えるということです。

リンクは次のとおりです。

<%= link_to 'Destroy', content, :confirm => 'Are you sure?', :method => :delete %>

も試しました:

<%= link_to 'Destroy', content, :confirm => 'Are you sure?', :method => :destroy %>

出力は次のとおりです。

<a href="/admin/contents/1400" data-confirm="Are you sure?" data-method="destroy" rel="nofollow">Destroy</a>

誰かが私がここで間違っていることを見つけることができますか? :-/


編集

最初は rails.js をロードしていませんでした。今やる。

私の破棄アクションの内容は次のとおりです。

def destroy
  @content = Content.find(params[:id])
  @content.destroy

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

次のように、コンテンツ インデックスから削除しています。

<% @contents.each do |content| %>
  <tr>
    <td><%= content.name %></td>
    <td><%= link_to 'Show', content %></td>
    <td><%= link_to 'Edit', edit_content_path(content) %></td>
    <td><%= link_to 'Destroy', content, :confirm => 'Are you sure?', :method => :destroy %></td>
  </tr>
<% end %>
</table>
4

2 に答える 2

4

URLは同じなので同じに見えます。違いはrequest メソッドにあります。あなたの Rails アプリはGETPUTと のDELETEリクエストを分離し (それらが同じ URL に対して行われた場合でも)、リクエストを正しいアクションにルーティングすることを知っています。

ただし、すべてのブラウザー/Web サーバーがこれらのメソッドのすべてをサポートしているわけではないため、Rails は目立たない JavaScript (ujs) に依存して一部の要求 (より具体的にPUTDELETE. このため、Rails アプリのバンドルの 1 つを含める必要があります (Prototype はデフォルトで付属しています。この gemからjQuery バージョンを入手できます)。詳細については、jQuery ujs の README (およびもちろんソース) を参照してください。

問題が発生している場合は、必要な ujs がないことが原因である可能性があります。csrf_meta_tagまた、HTML ヘッダーに を含めていない可能性もあります。

于 2011-02-03T04:02:10.437 に答える
2

いくつか問題が発生している可能性がありますが、何が発生しているか、どのようなエラーや動作が発生しているかについての情報がなければ、絞り込むのは困難です。

  1. rails.js をロードしていないため、引数を「削除」に設定しdata-method="delete"て AJAX 投稿を送信する効果はありません。_method
  2. destroyコントローラーのアクションが期待どおりに機能していません。
  3. contentcontent_pathは、破棄しようとしているモデルのインスタンスを参照するローカル変数ではありません (これが破棄しようとしている単数形のリソースである場合にのみ単数形を使用することに注意してください)。@content多分代わりに探していますか?文脈がないとなんとも言い難い。

明確にするために、methodオプションはコントローラーメソッドではなく、HTTP メソッドです。destroyHTTP メソッドはありません。Rails はdestroyoverdeleteを一種の「優雅に削除」するだけです。

于 2011-02-03T03:58:15.440 に答える