我的问题与Custom url in ruby on rails
有关但是,我希望用户能够动态选择他们的页面名称。我不想在route.rb文件中对页面信息进行硬编码(获取' my_page_here',:to =>' home #index')因为我的网站允许用户为其业务创建唯一页面并选择URL。例如:www.mallstores.com/mycoolbusiness实际上会访问www.mallstores.com/action/public/stores/12345
每当用户从我的网站创建新页面时,是否可以在route.rb文件中动态添加/修改条目?
答案 0 :(得分:2)
我认为您不需要动态修改路由。你需要使用routes dynamic segments
所以基本上你应该在routes.rb
的底部添加以下行。
get '/:store_name(.:format)', to: 'public/stores', as: 'public_stores'
重要提示
您必须将此行放在routes.rb
的底部,这样才不会影响其他路线,这将是最后一条路线。
基本上,当用户导航到http://yourdomain.name/store_name时,routes.rb
会将请求发送到商店操作中的public_controller
然后发送到stores
操作,您可以从中获取store_name url并在数据库中查看它,然后将其呈现给请求者。
您还可以使用friendly_id gem来增强流程并确保商店名称的唯一性。
另一种技术
您可以将以下代码放在routes.rb
文件
Store.all.each do |store|
get "/#{store.name.parameterize}", to: 'public#store', store_id: store.id
end
但我更喜欢第一条规则,因为它更干净,如果你有百万商店怎么办。那么这会降低你的应用程序的性能。