正如我可以使用用户名个人资料页面创建的 Rails

As I can create with username profile page Rails

我无法找到我想要的准确信息,所以我的第二个选择是询问。

所以,我想知道如何从头开始创建用户 profile,并用您的 username 替换 ID

示例:http://example.com/profile/{username} 在这种情况下,我对用户名没有任何问题,就像在游戏服务器上工作的用户名一样,它们不能包含空格或不寻常的字符。

我做了一些事情,但我认为这是错误的,即使我的网站没有任何错误。

备注: 我的设计模型:Player/s

玩家架构

    create_table "players", force: :cascade do |t|
    t.string   "email",                  default: "",    null: false
    t.string   "encrypted_password",     default: "",    null: false
    t.string   "reset_password_token"
    t.datetime "reset_password_sent_at"
    t.datetime "remember_created_at"
    t.integer  "sign_in_count",          default: 0,     null: false
    t.datetime "current_sign_in_at"
    t.datetime "last_sign_in_at"
    t.string   "current_sign_in_ip"
    t.string   "last_sign_in_ip"
    t.datetime "created_at"
    t.datetime "updated_at"
    t.boolean  "admin",                  default: false
    t.integer  "role_id"
    t.string   "nick"
    t.string   "username"
  end

变量 "admin and role_id" 用于网络上的费用。我认为这与主题无关。

查看了其他教程,但我没有更多特别的东西可以添加到我的代码中。

我的控制器: - registrations_controller.rb

class RegistrationsController < Devise::RegistrationsController
  protected

  def after_sign_up_path_for(resource)
    new_path(resource)
  end
end

我的模特: - player.rb

class Player < ActiveRecord::Base
  validates :email, :presence => true, :email => true

  # Include default devise modules. Others available are:
  # :confirmable, :lockable, :timeoutable and :omniauthable
  devise :database_authenticatable, :registerable,
  :recoverable, :rememberable, :trackable, :validatable
  belongs_to :role
  before_create :set_default_role

  has_one :profile

  private
  def set_default_role
    self.role ||= Role.find_by_name('registered')
  end
end

在我看来,控制器配置文件包含: myProfile => 只有用户的个人资料 profiles 是配置文件的全局视图

route.rb

get 'profile/:id' => 'profile#perfiles'

  resources :profile, only: [:edit]

  map.resources :players, :has_one => :profile
  map.resources :profiles

我希望我没有要求太多,但是嘿,这是一个我有的问题,值得一试。

提前致谢,如有遗漏请告诉我。

我相信您要做的是重写命名路由参数。有关详细信息,请参阅此 rails 指南:http://edgeguides.rubyonrails.org/routing.html(第 4.10 节)。

基本上,您只需将 param: :username 添加到您的路线文件中:

resources :profile, only: [:edit], param: :username

这将使您的路线看起来像:

profile GET  /profile/:username(.:format)  profile#show

在你的控制器中:

@profile = Profile.find_by(username: params[:username])

希望对您有所帮助!