2012-04-22 6 views
1

私はタグを持った作業レポートを持つレールアプリを持っています。 Report/Index.html.erbでは、タグを選択してレポートを並べ替えることができます。一度に1つのタグしか選択できないので、選択ボックスが最もうまくいくと感じています。私は現在のタグを更新するメソッド呼び出しtag_withでの作業の好みのコントローラを持ってメソッドを呼び出すセレクトボックスを作成する

<%= select("preferences", :tag_with, 
["Politics", "Technology", "Entertainment", "Sports", "Science", "Crime", 
"Business", "Social", "Nature", "Other"], :prompt => "Filter Feed by:")%> 

:私は現在、これを持っています。ただし、このコードでは、選択ボックスのみが生成されます。ユーザーがタグの1つを選択すると、それは好みのコントローラーからtag_withメソッドを呼び出します。

私は、一連のlink_to行を生成してタスクを完了しましたが、実際には選択ボックスが必要です。

<%= link_to "Politics", :action => "tag_with", :tag => "Politics", :controller =>"preferences" %> 
<%= link_to "Entertainment", :action => "tag_with", :tag => "Entertainment", :controller =>"preferences" %> 
<%= link_to "Science", :action => "tag_with", :tag => "Science", :controller =>"preferences" %> 
<%= link_to "Technology", :action => "tag_with", :tag => "Technology", :controller =>"preferences" %> 

各タグについても同様です。これはうまく動作しますが、かさばり、望ましくありません。選択ボックスで同じことをする方法はありますか?

+0

選択ボックスのonchangeイベントをバインドするだけでしたか? –

+0

どうすればいいのですか?私はonChangeイベントを何にバインドするか分からなかった。私はonChange => link_toを試しました...しかし、それは動作しません。 – Vasseurth

+0

まず、これは控えめに行われるべきです(selectにIDを与え、javascriptでイベントを処理してください)。 http:// railscastsを参照してください。com/episodes/205-unobtrusive-javascriptとgoogleの結果を「邪魔にならないjavascriptの手紙」の詳細については。どのバージョンのRails? Coffee Scriptを使用していますか?私に知らせてください。まだ助けが必要な場合は、完全な回答を提出します。 –

答えて

1

reports.js.coffeeファイル、または必要なその他のjsファイル。

jQuery -> 
    $('select#preferences').change -> 
    $.get 'preferences/tag_with',{ term: $('option:selected', this). val() } 

それとも、あなたが定期的にJavaScriptを使用したい場合:

$(function(){ 
    $('select#preferences').change(function() { 
    $.get('preferences/tag_with',{term: $('option:selected',this).val()}); 
    }); 
}); 

リンクはGET要求です。 jQuery .change()メソッドは、誰かが変更を加えるたびに起動します。 $.getメソッドは、URLにGET要求を送信し、データを渡すことができます(2番目の引数)。もし上記の例ではなるだろうように、このデータは、あなたのparamsハッシュ次のようになります。

params[:term] #=> the value attribute of whatever option was selected by the user 

は、より多くの助けのため.change()$.get()にjQueryのドキュメントを参照してください。


更新

このページを更新するためには、最も簡単な方法は、あなたが部分的に変更するテーブルを抽出することになる、のは、それが_report.html.erbと呼ばれると仮定してみましょう。部分的には、次のようになります。

<div id="report"> 
    <%= render @report %> 
</div> 

*注:render @reportrender :partial => 'report'のためだけ短いです。 http://guides.rubyonrails.org/layouts_and_rendering.html *

あなたの設定コントローラでは、tag_withオプションを使用して、@reportオブジェクト(またはその部分にデータを配信しているもの)を設定する必要があります。

次に、あなたはviews/preferences/tag_with.js.erbというファイルを作成し、その中にこのような何かを置く必要があります。

$('div#report').html('<%= escape_javascript(render @report) %>'); 

これは新しいコンテンツでレポートコンテナを更新します。

+0

これはすばらしく動作します!ただし、ページをリロードした後にフィルタを交換するだけです。これを自動的に行う方法はありますか? – Vasseurth

+0

私はlink_toを使用すると、 'ReportsController#index by HTMLとして処理する 'と思っていますが、selectを使用すると、' ReportsController#indexで処理します。* \ * 'となります。 理由をご存知ですか? – Vasseurth

+0

あなたのURLに '' preferences/tag_with.js''を使ってみて、何が起こるか見てみてください。 – Andrew

関連する問題