我想这应该是非常直接的,经过无效的搜索后,它似乎太简单了!
我有两种模式:客户端和:工作。客户有很多工作,工作属于客户。
在我的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>
非常感谢任何帮助,谢谢
答案 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
行