1

现在我发现在 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 提供任何类型的帮助?

4

1 回答 1

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

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

于 2012-08-06T21:34:49.693 回答