现在我发现在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的任何类型的帮助?
答案 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'可能会捕获您的所有路线。如果是这种情况,只需将其移至第一行之后。