2016-02-26 50 views
0

我试图通过检查用户在注册时输入的代码是否存在于表中来配置设备来验证用户注册。为了测试它,我目前只是针对静态字符串测试输入。有关如何去做的任何想法?问题在于,由于某种原因,字符串未从:ticket_id注册字段传递到用户类中的:invite_code_valid函数。当我查看变量中的内容时,它只是空白,并且在注册时使用字符串“hello”给出我指定的错误消息。向ROR设计添加自定义字段验证

代码是英雄混帐,所以我不能链接到它,但我这样做:

迁移:

class AddUserTicketIdField < ActiveRecord::Migration 
    def change 
    change_table :users do |t| 
     t.text :ticket_id 
    end 
    end 
end 

在模型/ user.rb:

验证:invite_code_valid,:on =>:创建

def invite_code_valid 
    unless self.ticket_id == "hello" 
     self.errors.add(:ticket_id, "membership code is not one we recognize, check again?") 
    end 
    end 

在色器件/注册/ new.html.erb:

<div class="field"> 
    <%= f.label :Membership_code %><br /> 
    <%= f.text_field :ticket_id, autocomplete: "off" %> 
</div> 

要查看的代码在所有工作我想验证一个特定的电子邮件是这样的:

def invite_code_valid 
    unless self.email == "[email protected]" 
     self.errors.add(:ticket_id, "membership code is not one we recognize, check again?") 
    end 
    end 

工程。当使用电子邮件[email protected]注册时,注册虽然,但不是。

这是怎么回事,我错过了关于设计是如何工作的?

------------已解决------------

Josh Deedens答案低于现场。谢谢!为了将来的参考,这就是我所做的。

class ApplicationController < ActionController::Base 

    before_action :configure_permitted_parameters, if: :devise_controller? 

    protected 

    def configure_permitted_parameters 
     devise_parameter_sanitizer.for(:sign_up)  << :ticket_id 
    end 
end 

回答

2

我敢打赌,在你被咬伤strong_parameters:

从设计自述:https://github.com/plataformatec/devise#strong-parameters

当您自定义你自己的看法,你可能会增加新的属性形成。 Rails 4将参数清理从模型转移到控制器,导致Devise在控制器中处理这个问题。

该文档去到举这个例子

class ApplicationController < ActionController::Base 
    before_action :configure_permitted_parameters, if: :devise_controller? 

    protected 

    def configure_permitted_parameters 
    devise_parameter_sanitizer.permit(:sign_up, keys: [:username]) 
    end 
end 

所以尝试添加configure_permitted_parameters方法您ApplicationController中,与相应的过滤器一起。并用:ticket_id替换:username密钥,看看是否解决了您的ticket_id为零的问题。

祝你好运!

+0

非常感谢!这几乎解决了它!使用上面的蝙蝠代码给出了一个方法错误出于某种原因,但我搜索了一下并修改了它。原问题的解决方案!太感谢了! – aerugo

+0

不客气。很高兴帮助! –