模拟在rails中提交另一个表单

时间:2013-01-25 13:50:18

标签: ruby-on-rails ruby ruby-on-rails-3.1

我有一个带有这样的视图的rails应用程序视图

  = 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)

我想点击链接Movie Title,我还能将ratings_form的参数添加到网址吗?所以我也可以访问控制器中的那些

EG。 评级表提交= /movies?ratings[G]=1&commit=Refresh
点击链接= /movies?sort=release_date

当我点击链接时,我希望ratings[G]=1(或任何选中的复选框)都在URL中。

在rails中有没有优雅的方法呢?

Rails版本:3.1.0

2 个答案:

答案 0 :(得分: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 :(得分: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中调用哪个提交(因为可能有任意数量的表单)。它可以是每种形式的任何独特。