我无法找到我想要的准确信息,所以我的第二选择就是问。
所以,我想知道如何从头开始创建用户profile
并使用username
替换ID
。
示例:http://example.com/profile/{username}
在这种情况下,我对用户名没有任何问题,就像那些在游戏服务器上工作的用户名一样,它们不能包含空格或不寻常的字符。
我已经做了一些事情,但我认为这是错误的,即使我的网站上没有任何错误。
注意: 我的设计模型:播放器
玩家架构
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和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 Profile&lt;的ActiveRecord :: Base的 belongs_to:球员 端
在我看来,让控制器配置文件包含: myProfile =&gt;只有用户的个人资料 配置文件是配置文件的全局视图
route.rb
get 'profile/:id' => 'profile#perfiles'
resources :profile, only: [:edit]
map.resources :players, :has_one => :profile
map.resources :profiles
我希望我不要求太多,但是,嘿,这是我的一个问题,值得一试。
提前致谢,如果有任何遗漏,请告诉我。
答案 0 :(得分:0)
我相信您要做的是覆盖指定的路线参数。有关详细信息,请参阅此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])
希望有所帮助!