Ruby on rails Rails中的用户名路由
我正在尝试创建一个项目,其中/username被重定向到该用户名的配置文件。我怎样才能做到这一点呢?路线是:Ruby on rails Rails中的用户名路由,ruby-on-rails,ruby,Ruby On Rails,Ruby,我正在尝试创建一个项目,其中/username被重定向到该用户名的配置文件。我怎样才能做到这一点呢?路线是:“get/:username”,到:“users#profile” 您可以将users#profile更改为调用控制器操作的任何内容 您需要确保将此放在路线的末尾。否则它将拦截你的所有路线 例如,不要执行以下操作: get "/:username", to: "users#profile" get "/foo", to: "pages#bar" 因为您永远无法到达页面#栏端点 前面的答案
“get/:username”,到:“users#profile”
您可以将users#profile
更改为调用控制器操作的任何内容
您需要确保将此放在路线的末尾。否则它将拦截你的所有路线
例如,不要执行以下操作:
get "/:username", to: "users#profile"
get "/foo", to: "pages#bar"
因为您永远无法到达
页面#栏
端点 前面的答案的问题是,路由中不匹配的任何内容都将被路由到用户#profile
或者,为了解决这个问题,您可以创建一个动态路由器,如下所示:
class DynamicRouter
def self.load
Rails.application.routes.draw do
User.all.each do |user|
puts "Routing #{user.name}"
get "/#{user.name}", :to => "users#profile", defaults: { id: user.id }
end
end
end
def self.reload
Rails.application.routes_reloader.reload!
end
end
然后在UsersController上:
class UsersController < ApplicationController
def profile
@user = User.find(params[:id])
redirect_to not_found_path unless @user
end
end
最后,要在添加/更新用户时重新加载路由,请执行以下操作:
class User < ActiveRecord::Base
...
after_save :reload_routes
def reload_routes
DynamicRouter.reload
end
end
class用户
希望有帮助
class User < ActiveRecord::Base
...
after_save :reload_routes
def reload_routes
DynamicRouter.reload
end
end