我有一個表格,其中用戶(「部件」)提交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 確實匹配數據庫中的引腳爲用戶。幫幫我!謝謝:)
在你的'validate_pin'方法,正上方的if語句,加入這一行:'養「#{@ member_pin} ==#{會議[:submitted_pin]}#{@ member_pin ==會話[:submitted_pin] }「'這會給你三個數據:Rails可以理解的會話變量submitted_pin,Rails可以理解的member.pin及其等價性。如果我不得不從一個常規開始冒險猜測,我敢打賭,一個是一個字符串,另一個是一個整數 - 這使我一直在困擾着我。 – 2012-02-15 01:40:38
非常感謝您的回覆。看起來你是對的......你必須是一個字符串,而且必須是一個整數。這是我從你寫給我的'raise'方法得到的! '5555 == 5555:false' - 如何在我的問題中提供的代碼中轉換'to_i'或'to_s'? – briankulp 2012-02-15 01:57:42
完美!有幾種方法可以從這裏開始:最簡單的方法是在每個你正在比較的項目上設置'.to_i',這樣你就不必關心哪個是哪個。另一種方法是使用上的每個數據點的'.inspect'或'.class',找出哪些部分是什麼,然後用一個轉換器,例如'.to_i'只需要一個轉換。其中一個應該做的伎倆! – 2012-02-15 02:00:18