0

ログイン後に現在のユーザー名を表示しようとしています。

したがって、ページの上部には「Logged in as Patrick」と表示されます。ただし、サインアップするすべてのユーザーがプレーヤーまたはコーチのいずれかになるように、ポリモーフィックな関連付けを設定しています。

ポリモーフィックな関連付けは、コーチとプレーヤーの両方がテニスをするため、ラベルまたは :tennis_player の下にあります。

ビューのコードは次のとおりです。

    <div class="container">
    <header>

    <div class="logo">
        <%= link_to(image_tag 'tennis_ball.png', :width => 100, :height => 100) %>
    </div>
    <div class="slogan">
        <h3>Setfortennis</h3>
    </div>


  <div id="user_nav">
    <% if current_user? %>
        Logged in as <%= @current_user %>

        <%= link_to "log out", log_out_path %>
    <% else %>
        <%= link_to "Sign Up", sign_up_path %> or
        <%= link_to "Log in", log_in_path %>
    <% end %>
</div>

    </header>
</div>

これが私のアプリケーションコントローラーです

    helper_method :current_user?

  before_filter :get_user

  def current_user?
    !!current_user
  end

  def current_user
    @current_user ||= session[:user_id] &&
      User.find_by_id(session[:user_id])
  end

  def check_logged_in
    redirect_to( new_session_path, :notice => "You must be logged in to do that!") unless current_user?
  end

  def get_user
    @user = User.new
  end
end

そして、これが私のモデルです。他に解決する必要があることがあれば教えてください。

    class Player < ActiveRecord::Base
  attr_accessible :about, :club, :first_name, :last_name, :profile_picture, :racket, :ranking, :image

  has_attached_file :image, styles: {
    thumb: '100x100>',
    square: '200x200#',
    medium: '300x300>'
  }

  has_many :videos

  has_one :user, :as => :tennis_player

end


  class Coach < ActiveRecord::Base
  attr_accessible :about, :club, :first_name, :last_name, :profile_picture, :ranking

  has_one :user, :as => :tennis_player
end

ユーザーモデル。

    class User < ActiveRecord::Base
  attr_accessible :email, :password_hash, :password_salt, :password, :password_confirmation
  attr_accessor :password

  belongs_to :tennis_player, :polymorphic => true

  before_save :encrypt_password

  validates_confirmation_of :password
  validates_confirmation_of :password, :on => :create
  validates_confirmation_of :email
  validates_uniqueness_of :password

  def self.authenticate(email, password)
    user = find_by_email(email)
    if user && user.password_hash == BCrypt::Engine.hash_secret(password, user.password_salt)
      user 
    else
      nil
    end
  end

  def encrypt_password
    if password.present?
      self.password_salt = BCrypt::Engine.generate_salt
      self.password_hash = BCrypt::Engine.hash_secret(password, password_salt)
    end
  end
end
4

1 に答える 1

0

セッションを作成するたびに、正しい ID を保存する必要があります。でもちょっとデザインを変えてみます。Player と Coach の 2 つの個別のテーブルを用意する代わりに、基本クラスの User を作成し、それを継承できます。

class User < ActiveRecord::Base
  attr_accessible :about, :club, :first_name, :last_name, :profile_picture, :ranking
end

class Player < User
end

class Coach < User
end
于 2013-04-01T17:54:56.170 に答える