Ruby on rails RubyonRails:如何验证是否在特定页面上?
在我的RubyonRails应用程序中,我尝试添加验证,以确保用户在文本框中输入值。在我的系统中,我有一个名为Ruby on rails RubyonRails:如何验证是否在特定页面上?,ruby-on-rails,ruby,ruby-on-rails-3,validation,ruby-on-rails-4,Ruby On Rails,Ruby,Ruby On Rails 3,Validation,Ruby On Rails 4,在我的RubyonRails应用程序中,我尝试添加验证,以确保用户在文本框中输入值。在我的系统中,我有一个名为Account的表,当用户进入views/accounts/_form.html.erb页面添加一个新的电子邮件帐户时,该表存储用户的电子邮件帐户信息,我想验证是否存在端口号。我可以通过以下代码执行此操作: validates :port, presence: true 这成功地确保了用户输入他们的端口号,但是当用户通过views/users/_new.html.erb页面注册时,他们
Account
的表,当用户进入views/accounts/_form.html.erb
页面添加一个新的电子邮件帐户时,该表存储用户的电子邮件帐户信息,我想验证是否存在端口号。我可以通过以下代码执行此操作:
validates :port, presence: true
这成功地确保了用户输入他们的端口号,但是当用户通过views/users/_new.html.erb
页面注册时,他们只需输入电子邮件地址(例如example@example.com)然后,users\u controller
将在Account
表中为此电子邮件地址创建一条记录。我的问题是在views/accounts/_form.html.erb
页面上需要端口号,但在views/users/_new.html.erb
页面上不需要
如果用户在views/accounts/_form.html.erb
页面或调用accounts\u controller
中的create
方法,是否有方法验证用户是否输入了端口号
我知道我可以通过HTML所需的验证这样做:
true%>
,但我需要添加进一步的验证以及显示,因此这并不合适。您可以创建一个attr\u accessor
字段来确定是否应该进行验证
class Account < ActiveRecord:Base
attr_accessor :port_needs_validation
validates :port, presence: true, if: -> {port_needs_validation}
将该部分逻辑提取到form对象中,检查。从那时起,情况发生了变化,作者使用
Virtus
构建表单对象,现在更流行和最新的gems是:
帐户类型
属性迁移中的拼写更改更新仅仅是因为帐户类型发生了更改?
是真的
所以。。表单类永远不会出现,模型回调永远不会出现。我不建议您使用
模型
了解视图
。在@SteveTurczyn的解决方案中,在模型中引入了一个抽象字段来标识它来自哪个页面,这是一个很好的解决方案
从开始,视图
和模型
都与控制器对话,另一个解决方案是在传递值以创建帐户
之前,让控制器处理参数验证
def create
@account = Account.new
@account.assign_attributes(account_params)
@account.port_needs_validation = true
if @account.save
...