2013-04-29 54 views
0

这关系到我这里张贴了一个问题:我使用的是表单提交从jQuery用户界面自动完成框中选择一个值Route a form to new controller action in Ruby on Rails如何包括记录id在URL时,形式红宝石提交on Rails的

,并使用隐藏字段保留ID:

<%= form_tag "queue", method: :post, html: {id: "select_user"} do %> 
    <%= hidden_field_tag('user_id', '') %> 
    <%= text_field_tag('user', nil, :placeholder => 'Enter a user...', class: "users", 
         data: {autocomplete_source: User.order(:lastname, :firstname).map { |u| {:label => u.firstname + " " + u.lastname, :id => u.id} }}) %> 
<% end %> 

队列是在一个名为“项目”,这样我可以检索基于用户的项目模型和控制器单独行动。

的routes.rb

match 'queue' => 'projects#queue', :as => :queue 
    match 'queue/:id' => 'projects#queue', :as => 'projects_queue' 

当提交上面的形式中,所述URL是现在 '队列/队列',代替 '队列/:ID'。有什么办法可以在控制器中改变这个来添加用户ID吗?

回答

1

你要“队列/队列”的原因是表单的动作被设置为相对于当前路径:

<%= form_tag "queue", method: :post, html: {id: "select_user"} do %> 

应该是:

<%= form_tag "/queue", method: :post, html: {id: "select_user"} do %> 

得到'队列'控制器上的'索引'操作。


如果你希望你的控制器做重定向,您可以使用redirect_to directive这样

def index 
    redirect_to "/queue/"+params[:user_id] 
end 

在另一方面,它可能是更容易捕捉与jQuery的点击更改表单的动作:

$('#select_user').on('submit', function(e){ 
    var f = $(this); 
    if(!f.data('action_updated')){ 
    e.preventDefault(); 
    f.attr('action','/queue/'+$('input[name=user_id]', f).val()); 
    f.data('action_updated', true); 
    f.trigger('submit'); 
    } 
} 
+0

感谢您的帮助。控制器中的重定向对我来说非常合适。我可能会在未来尝试jQuery解决方案。 – Drew 2013-04-29 19:46:41

+0

很高兴工作! – 2013-04-29 20:09:31