2010-12-14 56 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

相关问题