2012-02-15 77 views
2

我有一個表格,其中用戶(「部件」)提交4位PIN,然後將其保存到稱爲:submitted_pin會話變量相匹配。出於某種原因,快速if/else語句不能正常工作,並且我假設它是我的一個愚蠢的錯誤,但如果你願意看看我將不勝感激!Ruby on Rails的 - 檢查是否提交的表單數據數據庫數據

查看

<%= form_for :member_pin, :url => { :action => "verify_pin", :id => member.id } do |f| %>` 
    <%= f.label :pin %> 
    <%= f.text_field :pin %> 
<%= f.submit 'Submit' %> 

控制器

過濾

before_filter :validate_pin, :only => :show 

行動(POST路線)之前

def verify_pin 
    @member = Member.find(params[:id]) 

    session[:submitted_pin] = params[:member_pin][:pin] 
    redirect_to @member 
end 

過濾

def validate_pin 
    @member = Member.find(params[:id]) 
    @member_pin = @member.pin 

    if session[:submitted_pin] == @member_pin 
    render @member 
    else 
    redirect_to '/' 
    end 
end 

而這一切的結果重定向到我root_url無論什麼時候,即使輸入PIN 確實匹配數據庫中的引腳爲用戶。幫幫我!謝謝:)

+0

在你的'validate_pin'方法,正上方的if語句,加入這一行:'養「#{@ member_pin} ==#{會議[:submitted_pin]}#{@ member_pin ==會話[:submitted_pin] }「'這會給你三個數據:Rails可以理解的會話變量submitted_pin,Rails可以理解的member.pin及其等價性。如果我不得不從一個常規開始冒險猜測,我敢打賭,一個是一個字符串,另一個是一個整數 - 這使我一直在困擾着我。 – 2012-02-15 01:40:38

+0

非常感謝您的回覆。看起來你是對的......你必須是一個字符串,而且必須是一個整數。這是我從你寫給我的'raise'方法得到的! '5555 == 5555:false' - 如何在我的問題中提供的代碼中轉換'to_i'或'to_s'? – briankulp 2012-02-15 01:57:42

+0

完美!有幾種方法可以從這裏開始:最簡單的方法是在每個你正在比較的項目上設置'.to_i',這樣你就不必關心哪個是哪個。另一種方法是使用上的每個數據點的'.inspect'或'.class',找出哪些部分是什麼,然後用一個轉換器,例如'.to_i'只需要一個轉換。其中一個應該做的伎倆! – 2012-02-15 02:00:18

回答

2

基礎上,我們在評論中談到了提高的結果,這聽起來像有一類不匹配。最簡單的方法來解決(和,恕我直言,最簡單的閱讀)將如下調整驗證碼:

if session[:submitted_pin].to_i == @member_pin.to_i 
    render @member 
else 
    redirect_to '/' 
end 

如果有任何機會,session[:submitted_pin]nil,您可以使用session[:submitted_pin].try(:to_i);如果未設置該變量,將返回nil,並防止發生錯誤。

+0

Yikes!我得到這個錯誤:'未定義的方法「腳」爲5555:Fixnum' – briankulp 2012-02-15 02:10:11

+0

我還要提到的 - 正在呼籲'的錯誤<%= f.text_field:針%>'我的視圖的一部分。有任何想法嗎? :/ – briankulp 2012-02-15 02:17:16

+0

得到它的工作 - 非常感謝你的幫助! – briankulp 2012-02-15 06:08:04