2017-01-06 5 views
1

これでログインフォームを作成しようとしましたが、コードを実行するとそれがスローされます:[can't cast Hash to string] どうすれば解決できますか?Ruby on rails:ハッシュを文字列にキャストすることはできません

tbluserモデル

class Tbluser < ActiveRecord::Base 
    self.primary_key = "username" 
    def self.login(user,pass) 
     if user and pass 
      find(:conditions => ['username LIKE ? and password LIKE ?',"\#{user.to_s}","\#{pass.to_s}"]) 
     else 
      find(:all) 
     end 
    end 
end 

ログインコントローラ

class LoginController < ApplicationController 
    protect_from_forgery with: :null_session 
    def formlogin 

    end 
    def chekclogin 
     @dn = Tbluser.login(params[:user],params[:pass]) 
     if @dn.blank? 
      redirect_to:action => "error" 
     else 
      redirect_to:action => "success" 
     end 
    end 
    def souc 

    end 
    def error 

    end 
end 

ログインフォームビュー

<form class="login-form" accept-charset="UTF-8" action="/chekclogin" method="get"> 
     <%= text_field_tag :user, '', class: 'form-control', :placeholder => 'Username'%> 
     <%= password_field_tag(:pass, "", placeholder: "Password")%> 
     <button>login</button> 
     <p class="message">Not registered? <a href="#">Create an account</a></p> 
</form> 
+0

これは良いログインシステムではありません。たとえば、GET経由でパスワードを渡すべきではありません。私はあなたのユーザーのログインを処理するDevise(https://github.com/plataformatec/devise)のような認証宝石の使用を検討することをお勧めします。 – ReggieB

答えて

1

あなたは何が起こっているのか確認するために行うことができ、ここで物事のカップル:

  1. 要求をしたときにログを/logs/development.logsにチェックすると、パラメータがコントローラに渡されていることがわかります。
  2. コントローラー自体にRails.logger.info(params)を入れて、パラメーターが何であるかを確認します。

あなたがまだ立ち往生していない場合は、development.logのリクエストログに貼り付けることができます。注意点として、これはレール5での基本的なログインのための良いチュートリアルです

https://www.railstutorial.org/book/basic_login

幸運!

+0

私は上記のような私のログを参照してください: GET開始 "/ chekclogin?user = admin&pass = admin "127.0.0.1の場合2017-01-06 10:54:17 +0700 LoginController#chekcloginによる処理をHTML として行います。{" user "=>" admin "、" pass "=>" admin "} 管理 管理5msの はTypeError(文字列にハッシュをキャストすることはできません)で 完了500内部サーバーエラー: アプリ/モデル/ tbluser.rb:5:9: 'ログイン アプリ/コントローラ/ login_controller.rbで:in chekclogin ' – AkiraKan

+0

これはredirect_toと:actionの間のスペースでなければなりません。あなたのコードではredirect_toのように思えます:アクションはただ一つのことです。 –

+0

はいこれが正しいです!私のコードではredirect_toと:actionの間のスペースではありません。 今すぐ試してみます ありがとう – AkiraKan

関連する問題