正如我可以使用用户名个人资料页面创建的 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
profile_controller.rb
class ProfileController < ApplicationController
def members
end
def myProfile
@attributes = Profile.attribute_names - %w(id player_id created_at updated_at)
end
def new
@profile = current_player.build_profile
end
def create
@profile = current_player.build_profile(params[:profile].permit( :nick))
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
profile.rb
class 简介 < ActiveRecord::Base
belongs_to:球员
结束
在我看来,控制器配置文件包含:
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])
希望对您有所帮助!
我无法找到我想要的准确信息,所以我的第二个选择是询问。
所以,我想知道如何从头开始创建用户 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
profile_controller.rb
class ProfileController < ApplicationController def members end def myProfile @attributes = Profile.attribute_names - %w(id player_id created_at updated_at) end def new @profile = current_player.build_profile end def create @profile = current_player.build_profile(params[:profile].permit( :nick)) 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
profile.rb
class 简介 < ActiveRecord::Base belongs_to:球员 结束
在我看来,控制器配置文件包含: 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])
希望对您有所帮助!