Ruby on rails Rails:您能检查一下简单字符串比较方法的语法吗?

Ruby on rails Rails:您能检查一下简单字符串比较方法的语法吗?,ruby-on-rails,syntax,Ruby On Rails,Syntax,它将数据库中存储的实际密码(@submission.password)与用户从视图中输入的密码(params[:password])进行比较。 如果它们相等,则删除提交内容 这是字符串比较方法 def compare_password if @submission.password == params[:password] # This line is wrong. @submission = Submission.find(params[:id]) @s

它将数据库中存储的实际密码(@submission.password)与用户从视图中输入的密码(params[:password])进行比较。 如果它们相等,则删除提交内容

这是字符串比较方法

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%>
编辑

最初我的routes.rb是这样的

resources :submissions do
    collection do 

        post :compare_password
    end
end 
现在我改成

resources :submissions do
    member do 

        post :compare_password
    end
end 

@提交为零-您需要在检查密码值之前找到它-

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

您是否在数据库中存储实际密码?是的。提交的文件不会永久存储在数据库中,我会每周删除它们。所以失去他们不是什么大问题。。我不知道为什么它是零,因为我没有把它设置为零。我用的是标准脚手架。在“def create”下,我随机生成密码“@submission.password=ActiveSupport::SecureRandom.hex(16)”啊-我现在看到了-这一行“@submission=submission.find(params[:id])”需要在比较之前。我得到了“没有id就找不到提交”.@垃圾收集--您需要将您的compare_密码设置为成员路由,而不是收集,以便您的form_标记可以有一个类似于:/submissions/1/compare_password.的操作,该操作将为您提供参数[:id]。。。否则,您需要一个隐藏字段或将您试图破坏的提交的id传递给控制器的内容。
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