Rubyでlink_to関数に確認メッセージを追加したかった。
= link_to 'Reset message', :action=>'reset' ,:confirm=>'Are you sure?'
それが機能しない理由はありますか?
最初に、レイアウトにjquery_ujsがあることを確認する必要があります。メインapplication.jsに含めることでそれを行うためのベストプラクティス:
//= require jquery_ujs
レイアウトにapplication.jsが含まれていることを確認します。
= javascript_include_tag :application
一方、開発モードでは、ソースhtmlを表示し、jquery_ujs.jsが存在することを確認します。
サーバーを実行し、リンクタグにdata-confirm値があることを確認します。例:
<a href="/articles/1" data-confirm="Are you sure?" data-method="delete">
これらの手順がすべて正しい場合、すべてが機能するはずです!
注:このRailsCastを確認してください http://railscasts.com/episodes/136-jquery-ajax-revised
間違っているかもしれませんが、:action
オプションと共にコントローラーを指定していません。以下を試しましたか?ルートにmessages
リソースが設定されていると仮定します:
link_to 'Reset', message_path(@message), :confirm => 'Are you sure?'
[〜#〜] edit [〜#〜]:上記は非推奨です。 Rails 4.0は、プロンプトをデータ属性として受け入れるようになりました。ドキュメントを参照してください here (@Rickyに感謝)。
link_to 'Reset', message_path(@message), :data => {:confirm => 'Are you sure?'}
Rails 3でこれがどのように行われたか思い出せませんが、Rails 4では簡単にできます:
<%= link_to 'Reset message', { controller: 'your_controller', action: 'reset' }, data: {confirm: 'Are you sure?'} %>
<%= link_to "Delete this article", article_path(article), method: :delete,
data: { confirm: "Are you sure you want to delete the
article?"}, class: "btn btn-xs btn-danger" %>
article_path
がプレフィックスで、(article)
がmethod: :delete
メソッドに必要なid
を渡すボタンリンク。コードの後半では、確認メッセージが追加されます。
これを試して:
= link_to 'Reset message', {:action=>'reset'}, :confirm=>'Are you sure?'
またはより明確にする
= link_to('Reset message', {:action=>'reset'}, {:confirm=>'Are you sure?'})
参照 http://api.rubyonrails.org/classes/ActionView/Helpers/UrlHelper.html#method-i-link_to
{:action => ..., :controller => ...}
のようなオプションとしてurlを指定すると、3つのパラメーターがあることがわかります。
link_to(body, url_options = {}, html_options = {})
Rubyでは、関数呼び出しの最後のパラメーターがハッシュの場合、{}
文字でラップする必要はありません(言い換えると、ハッシュが最後のパラメーターである場合は省略できます)。 'Reset message'
文字列と{:action=>'reset', :confirm=>'Are you sure?'}
ハッシュの2つのパラメーターのみを持つ関数呼び出しとして解釈され、:confirm=>'Are you sure?'
はurl_option
ではなくhtml_option
として解釈されます
どういうわけか、これらのコードはSafariブラウザーのみで動作しません。
<%= button_to('', delete_path(), method: "delete", data: { confirm: 'Are you sure?', disable_with: 'loading...' }) %>
理解を深めるために、このrailscastsビデオをご覧ください。
http://railscasts.com/episodes/205-unobtrusive-javascript
Link_toヘルパーのRailsドキュメント。
http://api.rubyonrails.org/classes/ActionView/Helpers/UrlHelper.html#method-i-link_to
<%= link_to 'Reset Message', data: {confirm:"Are you sure?"} %>
「メッセージのリセット」とデータの間にパスを追加することを忘れないでください
Javascript_include_tagを見てください。正常に動作するはずです。
<%= link_to("Reset message", :method => :reset, :class => 'action', :confirm => 'Are you sure?') %>
最初に、JsパッケージがRails application。
そのため、application.jsファイルにjqueryとjquery_ujsが必要です。
//= require jquery
//= require jquery_ujs
ここで、application.jsファイルが必要なレイアウトに含まれているかどうかを確認する必要があります。デフォルトでは、レイアウトファイルはビューのレイアウトフォルダーのapplication.html.erbに残ります。
<%= javascript_include_tag 'application' %>
次に、リンクには次のようなデータ確認属性とデータメソッド属性が必要です。
<a href="/message/1/reset" data-method="delete" data-confirm="Are you sure?">
Erbでは、これは次のように書くことができます。
= link_to 'Reset', message_path(@message), data: {method: 'delete', confirm: 'Are you sure?'}
すべてが同じ方法で整列している場合、これは機能するはずです。