2017-01-06 136 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)看看params是什麼。

如果您仍然陷入困境,那麼如果您可以粘貼development.log的請求日誌,我可以看看並進一步提供幫助。

作爲一個方面說明,這是軌道5的好教程基本登錄:https://www.railstutorial.org/book/basic_login

祝你好運!

+0

我看到我的日誌如上: 開始GET「/ chekclogin?user = admin&pass = admin「for 127.0.0.1 at 2017-01-06 10:54:17 +0700 通過LoginController進行處理#chekclogin as HTML 參數:{」user「=>」admin「,」pass「=>」admin「} 管理員 管理員 完成500內部服務器錯誤在5ms的 類型錯誤(不能投射散列到字符串): 應用/模型/ tbluser.rb:5:在'登錄 應用程序/控制器/ login_controller.rb:9 :在'chekclogin' – AkiraKan

+0

它應該是redirect_to和action之間的空格。在你的代碼看起來像redirect_to:行動只是一件事,可能是相關的? –

+0

是的這是對的!在我的代碼中redirect_to和:action之間沒有空格。 現在我會試試 謝謝 – AkiraKan

相關問題