使用下拉字段的Rails查找表单

时间:2012-01-08 16:42:50

标签: ruby-on-rails forms activerecord select

我想这应该是非常直接的,经过无效的搜索后,它似乎太简单了!

我有两种模式:客户端和:工作。客户有很多工作,工作属于客户。

在我的routes.rb中,我有一个嵌套资源,如下所示:

resources :client do
  resources :job 
end

手动输入时的以下路径解决没问题:

/client/:client_id/job

我想要的是在作业索引页面上的一个简单的单字段下拉选择表单,其中列出了所有客户端,并在提交时指向具有所选client_id的上述路径。

我在view / job / index.erb

中有以下表格
<%= form_tag( client_index_path, :action => 'index', :method => 'get' ) do %>
  <%= collection_select ("job", "client_id", Client.all, "id", "name", {:include_blank => 'Filter by client'}) %>
  <%= submit_tag 'Go' %>
<% end %>

提交时解析为:

/client?utf8=✓&job%5Bclient_id%5D=2&commit=Go 

这是rails生成的HTML:

<select id="job_client_id" name="job[client_id]">
  <option value="">Filter by client</option>
  <option value="1">client1</option>
  <option value="2">client1</option>
  <option value="3">client2</option>
</select>

非常感谢任何帮助,谢谢

1 个答案:

答案 0 :(得分:1)

如果没有任何javascript,你不能通过纯HTML执行此操作。表单总是提交到一个URL,任何数据都是通过POST或GET参数提供的(这是/ client之后的东西?)。

有两种选择。

如果您可以依赖启用javascript,则劫持提交按钮以构建URL。像这样:

$("#form").submit(function(){
  client_id = $("#job_client_id").val();
  window.location = '/client/' + client_id + '/job/';
  return false; // don't sumbmit the form
})

编辑:这是一个有效的例子:http://jsfiddle.net/Fj5Kh/1/

您的第二个选择是将表单实际提交到服务器,并在那里进行重定向。这是一个额外的服务器调用,但它将工作没有JavaScript。您将创建一个特殊的控制器操作,该操作可以理解表单并使用redirect_to