Ruby on Rails - 检查提交的表单数据是否与数据库数据匹配

时间:2012-02-15 01:10:47

标签: ruby-on-rails ruby ruby-on-rails-3

我有一个表单,用户('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。救命!谢谢:))

1 个答案:

答案 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并防止错误被抛出。