2011-01-29 19 views
6

私はRailsの今日では、基本的な "破壊" のリンクを作成したいので、私はこれを書いた:レールに破壊リンクを作成するためにデフォルトのjavascriptファイルが必要なのはなぜですか?

<%= link_to "destroy me", @company, :method=>:delete 
%> 

生成されたコードだった:私のルートで

<a href="/companies/1" 
data-method="delete" 
rel="nofollow">destroy me</a> 

、通常の

resources :companies 

私の破壊操作は私のコントローラにありました。

いつでもリンクをクリックすると、showアクションにリダイレクトされます。奇妙な。それを含めた後

<%= javascript_include_tag :defaults %> 

、働いていた破壊のリンク:

は、それは私が私のレイアウトに次の行が含まれていませんでしたが判明しました!

なぜですか?この機能を実現するために、デフォルトのjavascriptタグを含める必要があるのはなぜですか?

私はプロトタイプを使用したくないので、必要なファイルのみをどのように含めるべきですか?

答えて

6

3.0以降、RailsはHTML5データ属性を持つクリーンなHTMLタグを生成します(この例ではdata-method)。これらのデータ属性をサポートするには、プロトタイプ用にrails.jsが必要です。 jQueryを使用する場合、jQueryバージョン(https://github.com/rails/jquery-ujs)が必要です。

簡単に言えば、rails.jsはjavascriptフレームワーク(プロトタイプまたはjquery)と一緒にクリックや他のイベントをタグにフックしたり、リンクをクリックすると別の賢いことがあります。リンクは通常のリンクです。

+0

トップの回答です。 – changelog

2

これはhtmlの制限と、アンカータグがGET以外の方法でリクエストを送信できないためです。

「データメソッド」を持つリンクをクリックすると、rails.js(:defaultsに含まれています)を見ると、正しいhttpメソッドを使用してURLに送信するフォームを生成して送信しますアンカータグで指定されています。

回避策のハックですが、通常のアンカータグでDELETEリクエスト(またはGET以外のHTTP動詞)を送信するオプションはありません。

jsを使用しない場合は、フォームを使用して(おそらくlink_toではなくbutton_toを使用して)リクエストを行います。フォームを構築するために独自のヘルパーを作成する場合は、ボタン・タグ(レール・ビルドの入力ではなく)を使用するようにすることができます。これは、通常のリンクのように見えるようにする簡単なスタイルです。

+0

なぜ投票が遅れましたか?私の答えは間違っていますか? – idlefingers

+0

ダウン投票は私のものではなかったが、ジェームスの答えは現場にあった。 – changelog

関連する問題