我想要用户资源的随机网址:Rails?

时间:2016-02-26 10:39:17

标签: ruby-on-rails ruby-on-rails-4 url-routing rails-routing

我有用户资源和模型。当我打开用户页面时,网址就像是/ users /:id。它是show action的默认URL。但是我想要这样的东西 - > 本地主机:3000/8-随机字母数字字符。 我的路线档案:

#for User model
  resources :users
  get 'signup'  => 'users#new'

用户资源信息,
:id = 1

HTTP(Method)  URL      Action   Named route        Purpose
GET          /users        index    users_path         page to list all users
GET          /users/1      show     user_path(user)    page to show user
GET          /users/new     new     new_user_path      page to make a new user (signup)
POST         /users         create  users_path         create a new user
GET          /users/1/edit  edit    edit_user_path(user)   page to edit user with id 1
PATCH        /users/1      update   user_path(user)     update user
DELETE       /users/1     destroy   user_path(user)     delete user

我希望/users/1是/ 8位数字 - 字母 - 随机字符串。

1 个答案:

答案 0 :(得分:0)

通常,您引用的网址称为永久链接,因此我们可以按照以下步骤开始:

首先,在您的Users表中添加永久链接字段

rails g migration AddPermalinkToUsers permalink:string

(在迁移过程中,您希望为此列添加索引以及唯一约束)

然后在您的用户模型中,创建一个before_create回调,为您的用户生成固定链接

class User < ActiveRecord::Base
  before_create :generate_permalink

  def to_param
    self.permalink
  end

  private 

    # Generates an 8 character alphanumeric id
    def generate_permalink
      self.permalink = SecureRandom.hex(8)
    end 

end

现在告诉你的路线要遵守这个范例

resources :users, param: :permalink

内部app / controllers / users_controller.rb:

def set_user
  @user = User.find_by(permalink: params[:permalink])
end