我有一个表单,用户('member')提交一个4位数的引脚,然后将其保存到名为:submitted_pin
的会话变量中。出于某种原因,快速的if / else语句不能正常工作,我认为这是我的一个愚蠢的错误,但如果你愿意看看我会非常感激!
查看
<%= 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输入 匹配该用户的数据库中的pin。救命!谢谢:))
答案 0 :(得分: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
并防止错误被抛出。