在Rails中管理URL参数

时间:2012-08-06 20:29:19

标签: ruby-on-rails url rest acts-as-taggable-on

现在我发现在rails中的路由和URL构建是半混乱的。我目前在显示/过滤数据时传入的标记符合以下内容。

match '/posts/standard/' => 'posts#standard'
match '/posts/standard/:tags' => 'posts#standard', :as => :post_tag
match '/posts/standard/:tags' => redirect { |params| "/posts/standard/#{params[:tags].gsub(' ', '+')}" }, :tags => /.+/

但是,现在我想添加一个只能采用一种状态的'技能'参数;但是,我对如何在URL中构建它感到困惑。我不能简单地......

match '/posts/standard/:tags/:skill' => 'posts#standard', as => post_tag, as: => post_skill

所以,我现在对此非常困惑,Rails是否提供构建URL的任何类型的帮助?

1 个答案:

答案 0 :(得分:3)

一种方法是保持主要路线

match '/posts/standard/:tags' => 'posts#standard', :as => :post_tag

并将附加的URL参数作为参数处理。网址看起来像:

/posts/standard/1?skill=something

并且很容易注入额外的参数,例如

link_to post_tag_path(:skill=> 'something')

然后您的控制器将执行

def standard
   if params[:skill] == 'something'
     ...
   else 
     ...
   end
end

此外,不确定这一点,但您的路线中的第一行'匹配'/ posts / standard /'=>由于匹配,'posts #standard'可能会捕获您的所有路线。如果是这种情况,只需将其移至第一行之后。