2016-04-28 9 views
0

"users.rb"にバリデータを表示したい。誰でも助けてくれますか?私はいくつかのビデオチュートリアルを見た後、自分自身が "新しい定義"ではなかったが、私はこれを解決する方法を知らなかった。レール4のバリデーションに何か問題がありますか?

user_controller.rb 
class UsersController::ApplicationController 
    def login  
    if params[:user] 
     @notice = "LOGIN FAILED" 
     @email = params[:user][:mailaddress] 
     @password = params[:user][:password] 
     @user  = User.find_by(mailaddress: @email) 

     if @user 
     @member = Member.find_by(user_id: @user.id) 
     if @member 
      @hash = OpenSSL::HMAC.hexdigest(OpenSSL::Digest.new('sha256'), @member.salt, @password) 
      if @hash == @member.hashed_password 
      # SUCCESS 
      @notice = "LOGIN SUCCESSFULL" 
      end 
     end 
     end 
    end 
    end 
end 
------- 
user.rb 

class User::ActiveRecord::Base 
    has_one :member 
    validates :mailaddress, presence: {message: "Email need inputed"} #want to show this validates in login.html.haml 
end 
--------------- 
login.html.haml 

= form_for(:user, url:login_path) do |f| 
    %div.login 
    = f.label "Email", class:'control-label' 
    = f.email_field :mailaddress, class: 'form-control' 
    = f.label "Password", class: 'control-label' 
    = f.password_field :password, class: 'control-label' 
    %div.btn-are 
     = f.submit 'Finish', class: 'btn' 

答えて

0

検証はモデル作成/更新でのみ機能しますが、ログインなどの操作では機能しません。

詳細についてはdocsをご覧ください。

あなたは、いくつかのparamsは

user_controller.rb 
class UsersController::ApplicationController 
    def login  
    if params[:user] 
     unless params[:user][:mailaddress] 
     flash[:error] = "Email is required" 
     render :your_login_path 
     end 
     @notice = "LOGIN FAILED" 
     @email = params[:user][:mailaddress] 
     @password = params[:user][:password] 
     @user  = User.find_by(mailaddress: @email) 

     if @user 
     @member = Member.find_by(user_id: @user.id) 
     if @member 
      @hash = OpenSSL::HMAC.hexdigest(OpenSSL::Digest.new('sha256'), @member.salt, @password) 
      if @hash == @member.hashed_password 
      # SUCCESS 
      @notice = "LOGIN SUCCESSFULL" 
      end 
     end 
     end 
    end 
    end 
end 


- flash.each do |name, msg| 
    = content_tag :div, msg, class: name 

= form_for(:user, url:login_path) do |f| 
%div.login 
    = f.label "Email", class:'control-label' 
    = f.email_field :mailaddress, class: 'form-control' 
    = f.label "Password", class: 'control-label' 
    = f.password_field :password, class: 'control-label' 
    %div.btn-are 
    = f.submit 'Finish', class: 'btn' 

が欠落している場合は、上記のコードがテストされていないが、動作するはずのフラッシュを表示することができます。ここで

flash documentation

あるしかし、私は強く、ユーザーのsign_in/sign_upを実行するためにdeviseを使用することをお勧めしています。

+0

本当にたくさん働いています –

+0

ようこそ@RyudoHalley :) – retgoat

関連する問題