2013-04-29 65 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