<%= text_field_tag 'search_name', :class => 'search_save' %>
<%= link_to "Save search" , save_search_path(@some_value), :remote => true, :method => :post %>
指定されたリンクでsearch_nameテキストフィールドの値を渡す方法はありますか?
<%= text_field_tag 'search_name', :class => 'search_save' %>
<%= link_to "Save search" , save_search_path(@some_value), :remote => true, :method => :post %>
指定されたリンクでsearch_nameテキストフィールドの値を渡す方法はありますか?
サーバーに値を投稿しようとしている場合は、HTMLフォームを使用する必要があります。それが彼らが設計されたものです。実際、ヘルパー:method => :post
のオプションとしてを指定するとlink_to
、Railsは動的にHTMLフォームを作成し、リンクがクリックされるとすぐに送信されます。なぜこれをしないのですか?
<%= form_tag '/save_search' do -%>
<%= text_field_tag 'search_name', :class => 'search_save' %>
<%= submit_tag 'Save search' %>
<% end -%>
これにより、必要に応じて値がサーバーに送信されます(params[:search_name]
コントローラーアクション内でアクセス可能)。
美学の問題である場合(たとえば、ボタンが醜く、代わりにリンクが必要だと思う場合)、いつでも送信ボタンをプレーンな古いCSSのリンクのようにスタイル設定できます。ユーザーにはリンクのように見えますが、さらに重要なことに、ボタンのように動作し、追加のロジックなしでフォームを送信します。
フォームを使用することが道であるとまだ確信しておらず、フォームを機能させることに熱心な場合は、jQueryを使用してそれを行うことができます。サンプルコードを少し変更してみましょう
<%= text_field_tag 'search_name', :class => 'search_save' %>
<%= link_to "Save search" , save_search_path(@some_value), :id => 'save_search' %>
次に、application.js
あなたの中に以下を追加することができます。
$(function() {
// Add click event binding to `Save search` link
$("#save_search").on("click", function(event) {
event.preventDefault(); // don't trigger default
// get the value inside the text field
var name = $("#search_name").val();
$.post('/save_search', { search_name: name }, function(data) {
// log the result from the server, or whatever...
console.log(data);
});
});
});
このイベントは、誰かが[検索の保存]リンクをクリックしたときに発生し、指定されたデータを使用してサーバーにAJAX呼び出しを行います(ユーザーがJavaScriptを無効にするなどの愚かなことをした場合を除く)。コントローラアクションは、を介してこのデータにアクセスできますparams[:search_name]
。お役に立てれば。ハッピーコーディング!
これは、RubyonRailsと重複している可能性があります-text_fieldの値をフォームで別のコントローラーのアクションのパラメーターに渡します
しかし、ここに答えがあります:http: //railspikes.com/2007/4/17/partial_dom_submit_with_link_to_remote
新しいバージョンのレール用に変更する必要がある場合があります。オプションはもう:submit
ないようです。リンクがGET
アクションに移動する場合は、javascriptchangeイベントを使用してリンク上のを変更できますhref
。POST
アクションでもこれを行う方法があると確信しています。
そして私はそれを機能させるためにこのページを使用しました:https ://makandracards.com/makandra/1383-rails-3-make-link_to-remote-true-replace-html-elements-with-jquery