我正在尝试通过检查用户在注册时输入的代码是否存在于表中来配置设计来验证用户注册。为了测试它,我目前只是针对静态字符串测试输入。有关如何做的任何想法?问题是由于某种原因,字符串没有从:ticket_id注册字段传递到用户类中的:invite_code_valid函数。当我检查变量中的内容时,它只是空白,并且在注册时使用字符串“hello”会给出我指定的错误消息。
代码是英雄git所以我无法链接到它,但我这样做了:
迁移:
class AddUserTicketIdField < ActiveRecord::Migration
def change
change_table :users do |t|
t.text :ticket_id
end
end
end
在models / user.rb中:
验证:invite_code_valid,:on =&gt; :创建
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 == "some@email.com"
self.errors.add(:ticket_id, "membership code is not one we recognize, check again?")
end
end
有效。使用电子邮件some@email.com注册时,注册会进行,但不会注册。
发生了什么事,我错过了Devise的工作方式吗?
------------求助------------
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
答案 0 :(得分:2)
我的赌注是你被强参数咬伤了:
来自设计自述文件: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中。并将:username
密钥替换为:ticket_id
,看看是否解决了ticket_id为零的问题。