我需要为预期丑陋的嵌套参数名称(这是设置,而不是我可以在这个时候改变的)的行动创建一个漂亮的路线。Rails命名路线使用复杂的参数名称
所以不是
http://domain.com/programs/search?program[type]=leader&program[leader_id]=12345
我想
http://domain.com/programs/search/leader/12345
的问题是Rails的路线定义不会处理复杂的参数名称。
map.programs 'programs/:program[type]/:program[leader_id]', :controller=>..., :action=>...
同样,我不能够改变控制器 - 它的成立期望基于一组预先存在的搜索表单,这些参数的名称。我只想为一些预定义的搜索创建更具可读性的路线。
当然,必须有一种方法来创建一个路径,将输入数据传递给名称比单字母-alpha-alpha更复杂的参数。
那么,现在你指出了嵌套哈希示例,我想知道是否可以使用嵌套路由完成。 否则您在控制器中的示例看起来像一个合理的选项。尽管理想情况下我会找到一个类似的解决方案,完全可以在路由定义中处理,并完全脱离控制器。例如: map.programs'programs /:type /:id',:remap => {:type =>'programs [type]',:id =>'programs [leader_id]'} 幸运的是,我不必担心路由助手和包装。这种特殊情况是客户将可读链接嵌入到其静态html中。 – wbr 2009-10-11 02:56:26
我只是建议使用wrapper来使用common rails语法来动态生成链接。嵌套路由将不起作用,因为它们仍然只会创建浅的params散列。至于:重映射选项。这是可能的,但你需要修改处理routes.rb的代码。 Rails源代码可能难以解读。 – EmFi 2009-10-11 03:34:27
哇,时光飞逝...上述两个答案都非常有帮助。我最终创建了一个友好的路线'workshop/search /:search_type/* criteria'加上ProgramsController中的before_filter,以便在将查询发送到程序模型之前重新排列查询....如果StackExchange给了我们一些通知单击“保存注释”并出现错误之前的编辑时间限制。 – wbr 2014-07-16 23:53:23