我有一个表单,用户(“成员”)在其中提交 4 位 PIN,然后将其保存到名为 :subscribed_pin
的 session 变量中。由于某种原因,快速的 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' %>
Controller
过滤前
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 图匹配。帮助!谢谢:)
最佳答案
根据我们在评论中讨论的加薪结果,听起来似乎存在类别不匹配。最简单的修复方法(恕我直言,最容易阅读)是调整验证器代码,如下所示:
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
如果未设置变量并防止抛出错误。
关于ruby-on-rails - Ruby on Rails - 检查提交的表单数据是否与数据库数据匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9286598/