Ruby on rails 如何在rails中使用两次id内部路由

Ruby on rails 如何在rails中使用两次id内部路由,ruby-on-rails,routes,Ruby On Rails,Routes,我有这样的路线: get "/:article_id" => "categories#show", as: :articles_category get '/:account_id' => "accounts#show", as: :show_account 但是为什么当我访问show\u account\u url时,我总是进入文章\u category\u url 为什么? 如何使用不同的操作使我的路由在url中具有两次/:id 但为什么当我访问show\u account\u

我有这样的路线:

get "/:article_id" => "categories#show", as: :articles_category
get '/:account_id' => "accounts#show", as: :show_account
但是为什么当我访问show\u account\u url时,我总是进入文章\u category\u url

为什么?

如何使用不同的操作使我的路由在url中具有两次/:id

但为什么当我访问show\u account\u url时,我总是访问 文章\类别\ url

您遇到的问题是,您试图访问相同的URL-domain.com/\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu。因为Rails无法处理差异,所以它使用第一条路由——您的类别url

有两种方法可以解决这个问题:

拥有路由控制器/使用slug 按惯例把路线分开 每个人都想要,但除非你有一个机制来计算哪个URL是正确的,否则你不能这么做。实现这一点的方法是创建路由控制器或使用

使用路由控制器实际上非常简单:

#config/routes.rb
get "/:id" => "router#direct", as: :slug

#app/controllers/routers_controller.rb
def direct
    #routing code (lots of ifs etc)
end
一个更好的方法是使用slug系统,它允许您直接路由到slug。我们将其与以下内容一起使用(&S):

这允许您将特定的slug发送到特定的控制器/操作。原因是什么?它创建了/[slug]路由,您可以通过站点访问这些路由


除此之外,您还可以查看-这有助于您使用slug创建资源丰富的路由。强烈推荐

我认为这不是个好主意。您是否能够区分xyz.com/15和xyz.com/30,哪一个是show\u account\u url和articles\u category\u url。不当我们人类无法得到它时,我们如何教机器也这样做?就这么简单:
#Slugs
  begin  
      Slug.all.each do |s|
        begin
          get "#{s.slug}" => "#{s.sluggable_type.downcase.pluralize}#show", :id => s.slug
        rescue
        end
      end
  rescue
  end