向ROR设计添加自定义字段验证
我试图通过检查用户在注册时输入的代码是否存在于表中来配置设备来验证用户注册。为了测试它,我目前只是针对静态字符串测试输入。有关如何去做的任何想法?问题在于,由于某种原因,字符串未从: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
我敢打赌,在你被咬伤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为零的问题。
祝你好运!
非常感谢!这几乎解决了它!使用上面的蝙蝠代码给出了一个方法错误出于某种原因,但我搜索了一下并修改了它。原问题的解决方案!太感谢了! – aerugo
不客气。很高兴帮助! –