1

这与我在这里发布的问题有关:Route a form to new controller action in Ruby on Rails

我正在使用表单提交从 jquery ui 自动完成框中选择的值,并使用隐藏字段来保留 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 %>

队列是对名为“项目”的模型和控制器的单独操作,因此我可以根据用户检索项目。

路线.rb

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

提交上面的表单时,url 现在是 'queue/queue',而不是 'queue/:id'。有什么方法可以在控制器中更改它以添加用户 ID?

4

1 回答 1

1

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

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

应该:

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

在“队列”控制器上获取“索引”操作。


如果您希望您的控制器进行重定向,您可以像这样使用redirect_to 指令

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');
  }
}
于 2013-04-29T19:36:39.497 回答