2010-12-14 60 views
0

它將存儲在數據庫(@ submission.password)中的實際密碼與用戶從視圖(params [:password])輸入的密碼進行比較。 如果它們相同,則提交被刪除。Rails:你可以檢查簡單字符串比較方法的語法嗎?

這是字符串比較方法。

def compare_password 
    if @submission.password == params[:password] # This line is wrong. 
     @submission = Submission.find(params[:id]) 
     @submission.destroy 
     redirect_to(@submission, :notice => 'Listing deleted successfully') 
    else 
     redirect_to(@submission, :alert => 'Password is incorrect.') 
    end 
end 

這是視圖。

<%form_tag "/submissions/compare_password" do%> 
<%=text_field_tag :password, params[:password]%> 
<%=submit_tag "Delete"%> 
<%end%> 

執行錯誤我得到的是這個。

undefined method `password' for nil:NilClass 

編輯

本來我的routes.rb這個樣子

resources :submissions do 
    collection do 

     post :compare_password 
    end 
end 

現在我改

resources :submissions do 
    member do 

     post :compare_password 
    end 
end 
+0

您是否將實際密碼存儲在數據庫中? – Gareth 2010-12-14 20:25:23

+0

是的。提交的內容不會永久存儲在數據庫中,我將每週大約刪除它們。所以他們的損失並不是什麼大問題。 – 2010-12-14 20:45:03

回答

1

@submission爲零 - 你需要檢查之前找到這密碼值 -

def compare_password 
    @submission = Submission.find(params[:id]) # it is nil till you get it here 
    if @submission && (@submission.password == params[:password]) 
     @submission.destroy 
     redirect_to(@submission, :notice => 'Listing deleted successfully') 
    else 
     redirect_to(@submission, :alert => 'Password is incorrect.') 
    end 
end 
+0

是的..我不知道爲什麼它是零,因爲我沒有把它設置爲零。我正在使用標準腳手架。在「def create」下,我隨機生成密碼「@ submission.password = ActiveSupport :: SecureRandom.hex(16)」 – 2010-12-14 20:46:39

+0

啊 - 我現在看到了 - 這一行'@submission = Submission.find(params [:id]) '需要在比較之前。 – 2010-12-14 20:48:56

+0

我收到「找不到ID無法提交」。 – 2010-12-14 20:54:08

相關問題