我正在挠头,无法自己解决这个问题。我已经看到了一种特殊的导航风格,即我发现在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
由于
答案 0 :(得分:2)
这很容易。您所要做的就是将所有即将到来的请求(/
除外)转发到各自的控制器操作,如products#show
。这就是我所说的
match ":id" => 'products#show' , via: :get , as: 'product_direct_url'
答案 1 :(得分:1)
您正在寻找的是clean_urls
(也称为slugging
):
清洁网址,RESTful网址,用户友好的网址或SEO友好的网址 纯结构URL,不包含查询字符串[例如, action = delete& id = 91]而是仅包含资源的路径 (在方案[例如,http]和权威[例如example.org]之后)。
你要问的是如何应用app-wide slugs(domain.com/[slug]
上的slu,而不是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中存在大问题,find
方法仅搜索id
,而不搜索slugs
。 friendly_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