2012-02-15 56 views
2

我有一个表格,其中用户(“部件”)提交4位PIN,然后将其保存到称为:submitted_pin会话变量相匹配。出于某种原因,快速if/else语句不能正常工作,并且我假设它是我的一个愚蠢的错误,但如果你愿意看看我将不胜感激!Ruby on Rails的 - 检查是否提交的表单数据数据库数据

查看

<%= 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 确实匹配数据库中的引脚为用户。帮帮我!谢谢:)

+0

在你的'validate_pin'方法,正上方的if语句,加入这一行:'养“#{@ member_pin} ==#{会议[:submitted_pin]}#{@ member_pin ==会话[:submitted_pin] }“'这会给你三个数据:Rails可以理解的会话变量submitted_pin,Rails可以理解的member.pin及其等价性。如果我不得不从一个常规开始冒险猜测,我敢打赌,一个是一个字符串,另一个是一个整数 - 这使我一直在困扰着我。 – 2012-02-15 01:40:38

+0

非常感谢您的回复。看起来你是对的......你必须是一个字符串,而且必须是一个整数。这是我从你写给我的'raise'方法得到的! '5555 == 5555:false' - 如何在我的问题中提供的代码中转换'to_i'或'to_s'? – briankulp 2012-02-15 01:57:42

+0

完美!有几种方法可以从这里开始:最简单的方法是在每个你正在比较的项目上设置'.to_i',这样你就不必关心哪个是哪个。另一种方法是使用上的每个数据点的'.inspect'或'.class',找出哪些部分是什么,然后用一个转换器,例如'.to_i'只需要一个转换。其中一个应该做的伎俩! – 2012-02-15 02:00:18

回答

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,并防止发生错误。

+0

Yikes!我得到这个错误:'未定义的方法“脚”为5555:Fixnum' – briankulp 2012-02-15 02:10:11

+0

我还要提到的 - 正在呼吁'的错误<%= f.text_field:针%>'我的视图的一部分。有任何想法吗? :/ – briankulp 2012-02-15 02:17:16

+0

得到它的工作 - 非常感谢你的帮助! – briankulp 2012-02-15 06:08:04