8

Rails アプリでインプレース検索を行いたいです。
プロトタイプでbutton_to_remoteを使っていましたが、今はJQueryを使っているのでlink_toに変更しました。
これは私のコードです:

<%= link_to "Search", {:action => "geocode", :with => "'address='+$('#{address_helper_id}').value"}, :method => :post, :remote => true %>

住所テキストフィールドをコントローラーに渡したいのですが、出力が期待したものではありません。

/mycontroller/geocode?with=%27address%3D%27%2B%24%28%27record_location___address%27%29.value

値を送信するにはどうすればよいですか?

4

4 に答える 4

16

もう少し目立たないように物事に取り組みたいと思うかもしれません。link_to呼び出しを次のようなものに置き換えることをお勧めします。

<%= link_to "Search", "#", :id => "search_geocode", :"data-href" => my_controller_geocode_path %>

これは、一意の ID と、data-href属性にコントローラー/ジオコード パスが含まれていることを除いて、既にあるものと実質的に同じです。これにより、Ruby と JavaScript をもう少し分離しておくことができます。

次に、あなたのapplication.js(または同様の場所で):

$('#search_geocode').live('click', function(event){
    event.preventDefault();
    $.post($(this).attr('data-href') + "?address=" + $('#address').val(), function(data){} );
});

これが効果的に行っているのは、イベント リスナーを検索ボタンにバインドすることです。これにより、検索リンクclickの属性で指定された URL またはパスにアドレスが送信されます。data-href

また、あなたのコードでidは、ソース アドレスの を ruby​​ で設定していることにも気付きました。id何らかのページ テンプレート条件に基づいてこの属性を変更する必要がある場合はdata-、リンクに別のパラメーターを追加して、私の例を拡張できます。例えば:

<%= link_to "Search", "#", :id => "search_geocode", :"data-href" => my_controller_geocode_path, :"data-address-id" => address_helper_id %>

繰り返しますが、application.js上記を次の行に沿ったものに置き換えます。

$('#search_geocode').live('click', function(event){
    event.preventDefault();
    $.post($(this).attr('data-href') + "?address=" + $($(this).attr('data-address-id')).val(), function(data){} );
});
于 2010-12-07T14:05:33.077 に答える
3

最も簡単な方法は、検索フィールドと送信ボタンを通常の形式で配置することです (デフォルトの Rails ビュー ヘルパーを使用します)。そして、:remote => :trueオプションをフォームに追加します。ドキュメントについては、 form_for url ヘルパーを参照してください。

jquery固有のrails.jsファイルをすでに追加していると思います。

このようにすると、指定されたアクションに ajax を介してフォームが自動的に投稿されます。

その後、データを処理できるように、「ajax:success」イベント ハンドラーのみが必要です。

$('<id of the form').bind('ajax:success', function(event, data, status, xhr) {
   ... process your data here ...
} 
于 2010-12-08T20:59:36.213 に答える
2

これを試すことができます:
<%= text_field_tag :address %>
<%= submit_tag "Search", :id => "search_button" %>


### Paste following code in your javascript

$("#search_button").live("click", function(){
  $.ajax({
    complete:function(request){},
    data:'address='+ $('#address').val(),
    dataType:'script',
    type:'get',
    url: '[ROUTE TO ACTION]' // in your case, may be '/[CONTROLLER NAME]/geocode' until you define route
  })
});


于 2010-12-03T09:41:00.897 に答える
-1

これはあなたの質問に対する直接的な回答ではありませんが、jrailsを調べましたか? jquery に切り替える前に使用していたのと同じプロトタイプの JavaScript ヘルパーを使用できます。これにより、プロトタイプから jquery への移行がはるかに容易になりました。

于 2010-11-27T17:17:53.997 に答える