【问题标题】:How can i implement a particular style of URLs in Rails我如何在 Rails 中实现特定样式的 URL
【发布时间】:2014-07-25 21:30:19
【问题描述】:

我摸不着头脑,自己也想不通。我已经看到了一种特殊的导航风格,即我发现在 SEO 方面非常好的 URL,但无论如何都无法在 Rails 中实现。我在 Rails 中开发了一些应用程序,所以了解 Rails 路由,但对特定网站所在的 php 一无所知。

所以你登陆主页是 www.xyz.com

然后,如果您单击任何侧栏链接以查看特定品牌的手机,例如三星,您单击三星手机链接,网址将转到 www.xyv.com/samsung_mobile_prices

好的,现在从 Rails 的角度来看,我们正在查看三星移动对象列表视图。当我们单击特定的三星型号时,例如三星 Galaxy J,则 url 更改为 www.xyz.com/samsung_galaxy_j

在 Rails 中我可以得到 www.xyz.com/samsung_mobile_prices/samsung_galaxy_j

但似乎无法理解如何实现 www.xyz.com/samsung_galaxy_j

谢谢

【问题讨论】:

    标签: php ruby-on-rails ruby-on-rails-3 url routing


    【解决方案1】:

    这很容易。您所要做的就是将所有即将到来的请求(/ 除外)转发到其各自的控制器操作,例如 products#show。这就是我的意思

     match ":id" => 'products#show' , via: :get , as: 'product_direct_url'
    

    【讨论】:

      【解决方案2】:

      您要查找的是名为clean_urls(也称为slugging)的东西:

      干净的 URL、RESTful URL、用户友好的 URL 或 SEO 友好的 URL 不包含查询字符串的纯结构 URL [例如, action=delete&id=91] 而是只包含资源的路径 (在方案 [例如 http] 和权限 [例如 example.org] 之后)。

      您要问的是如何应用应用程序范围的 slug(domain.com/[slug] 上的 slug,而不是 domain.com/controller/[slug]


      有两个步骤可以做到这一点 -

      路线

      #config/routes.rb
      root: "controller#action"
      ... # -> other routes first
      
      #This HAS to be last (otherwise Rails will think every URL is a request to this route)
      resources :products, path: "", only: "show"
      

      --

      蛞蝓

      通过上面的路由,你就可以访问domain.com/xyz_product

      为了让它工作,您需要能够在您的控制器/模型中调用您的产品ids / slugs。为此,我会强烈推荐使用friendly_id gem

      Rails 中 slugging 的最大问题是默认情况下,find 方法只搜索id,而不是slugsfriendly_id gem 解决了它:

      #app/models/product.rb
      Class Product < ActiveRecord::Base
          extend FriendlyId
          friendly_id :name, use: [:slugged, :finders]
      end
      

      这意味着您可以拨打电话:

      #app/controllers/products_controller.rb
      def show
          product = Product.find params[:id] #-> id can be a slug or a number :)
      end
      

      【讨论】:

      • 它确实解决了 /:id 部分,但该特定网站甚至设法显示所有手机和 www.xyz 中所有三星手机的 www.xyz.com/samsung_mobile_prices 之类的查询/搜索结果.com/3GB-RAM_Mobile-Phones 适用于所有具有 3GB 或更多内存的手机。它是如何做到这一点的。
      • 对不起,我不明白 - 你能再清楚一点吗?
      猜你喜欢
      • 2016-08-31
      • 1970-01-01
      • 1970-01-01
      • 2020-11-30
      • 2016-06-11
      • 2011-06-15
      • 2011-09-09
      • 1970-01-01
      • 2012-03-03
      相关资源
      最近更新 更多