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

时间:2015-04-14 02:04:35

标签: ruby-on-rails ruby-on-rails-4 devise user-profile

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

所以,我想知道如何从头开始创建用户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

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

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

1 个答案:

答案 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])

希望有所帮助!