尝试在我的 Rails 路线中使用用户名。
正在运行的路线:
resources :users, only: [:show, :create, :update, :destroy]
get "/:username" => "users#show", as: :user
get "/:username/account" => "users#account", as: :user_account
get "/:username/interests", to: "users#interests", as: :user_interests
get "/:username/offers" => "users#offers", as: :user_offers
get "/:username/trades" => "users#trades", as: :user_trades
但现在这样的路线:
get "/signup"
正在匹配/:username
规则
我知道我可以重新排序我的路线,以便 /signup 出现在之前,但这似乎有点 hacky。
有什么方法可以重写吗?或者是保留用户名验证的唯一方法?
谢谢
编辑
我最终使用保留字向用户模型添加了验证。命名空间是个好主意,但我不想污染我的 URL。
作为记录,Twitter 命名空间非用户名如下: twitter.com/i/discover(转到 Twitter 发现部分) twitter.com/discover(转到 @discover 的个人资料)
据我所知,Pinterest 保留名称,例如“搜索”
我遵循 Pinterest 的代码方法:
验证:
validate :reserved_username
private
def reserved_username
reserved_usernames = %w[index show create destroy edit update signup interests interest item items search offers offer community about terms privacy admin map authentication]
errors.add(:reserved_username, "username is reserved for the app") if reserved_usernames.include?(username)
end