0

このようなビューを持つレールアプリケーションビューがあります

  = form_tag movies_path, :method => :get, :id => "ratings_form" do
  Include:
  - @all_ratings.each do |rating|
    = rating
    = check_box_tag "ratings[#{rating}]", 1, @filter.include?(rating)
  = submit_tag 'Refresh', :id => "ratings_submit"

後で同じビューにリンク

link_to "Movie Title", movies_path(:sort => :title)

私がやりたいのは、リンクをクリックしたときです.URLにMovie Titleパラメータを追加することはできますか? ratings_formそのため、コントローラー内のものにもアクセスできます

例えば。評価フォーム送信 =/movies?ratings[G]=1&commit=Refresh
リンクをクリック =/movies?sort=release_date

ratings[G]=1リンクをクリックしたときに、(または選択したチェックボックスを) URL に含めたいと思います。

レールでこれを行うエレガントな方法はありますか?

レールのバージョン: 3.1.0

4

2 に答える 2

1

次のようなことができます。

link_to "Movie Title", movies_path(:sort => :title), onclick: "submit_ratings_form($(this));"

# some jQuery to add the params to the form and submit it:
var submit_ratings_form = function(a_tag) {
  var params = a_tag.href.split('?')[1];
  var input = $("<input>").attr("type", "hidden").attr("name", params.split('=')[0]).val(params.split('=')[1]);
  $('#ratings_form').append($(input));
  $('#ratings_form').submit();
}

このコードは、link_to? にパラメーターが 1 つしかないことを前提としています。

于 2013-01-25T14:29:03.393 に答える
0

代替案1:

さて、私はあなたがこのようなことをすることができると信じています:

my_array = [1,2,3,4,5]

link_to "Movie Title", movies_path(:sort => :title, :ratings=> my_array)

代替案2:

JS経由でフォームの送信を呼び出すリンクを使用してフォームを作成します。ビューのコードは次のようになります。

<% form_tag movies_path, :method => :get, :id => 'movie_'+arr.to_s do |f|%>    
        <%= hidden_field_tag('ratings[]', arr[0]) %>
        <%= hidden_field_tag('ratings[]', arr[1]) %>
        <%= hidden_field_tag('ratings[]', arr[2]) %>
        <%= link_to_function 'Movie Title', "document.getElementById('movie_"+arr.to_s+"').submit()"%>
      <%end%>

フォームIDは、JSで呼び出す送信を識別するために使用されます(フォームの数は任意である可能性があるため)。フォームごとに一意のものにすることができます。

于 2013-01-25T14:19:37.237 に答える