Ruby on rails 如何仅在注册时使用rails Desive验证某些字段
我有一组自定义字段附加到名为Entrant的设计模型 我有两个表格,一个是登记表(三个字段),另一个是账户区(12个字段)。大多数自定义字段区域是必需的,但仅在表单中位于帐户区域 我如何做到这一点Ruby on rails 如何仅在注册时使用rails Desive验证某些字段,ruby-on-rails,ruby,ruby-on-rails-4,devise,Ruby On Rails,Ruby,Ruby On Rails 4,Devise,我有一组自定义字段附加到名为Entrant的设计模型 我有两个表格,一个是登记表(三个字段),另一个是账户区(12个字段)。大多数自定义字段区域是必需的,但仅在表单中位于帐户区域 我如何做到这一点 我使用的是rails 4.2和ruby 2.1,默认情况下,Desive只要求电子邮件/密码的组合,您可以通过添加消毒剂添加其他字段(请参见->)。 如果要添加其他要验证的文件,则应创建辅助进入者控制器并向模型添加特定回调。 通常: after_update :validate_entrant_for
我使用的是rails 4.2和ruby 2.1,默认情况下,Desive只要求电子邮件/密码的组合,您可以通过添加消毒剂添加其他字段(请参见->)。 如果要添加其他要验证的文件,则应创建辅助进入者控制器并向模型添加特定回调。 通常:
after_update :validate_entrant_form, if: :property_changed?
我希望这对你有帮助 您可以简单地指定操作的验证,即:
validates :name, presence: true, on: :create # which won't validate presence of name on update action
如果您询问将自定义字段放置在何处,则生成Desive的视图,并使用这些字段更新相应的视图。有几种方法!例如,您可以执行条件验证
class Entrant < ActiveRecord::Base
validate :foo, if: :account_area?
def account_area?
!new_record? # Assumes that Entrant that has already been saved
# is in the account area
end
end
这只是一个很好的例子,说明了非rails特定的面向对象编程如何使您的生活更轻松,应用程序更易于维护。创建一个如上所述的类,将其粘贴到app/forms中,然后重新启动服务器。然后在控制器中,您只需将其传递给模型
class EntrantController < ApplicationController
def update
@form = Form.new(Entrant.find(params[:id]))
@form.attributes = params[:entrant]
if @form.save
redirect_to some_path
else
render "edit"
end
end
end
class EntrantController
也许这样对你有帮助
在设计模型中添加属性
:说属性访问器:验证某些属性
。在您的控制器操作中,设计模型实例,例如@user
必须像这样更新@user.validate\u special=true
。并在设计模型中更改适当的验证条件
validates :name, presence: true, if: :validate_certain_changed?
def validate_certain_changed?
validate_certain.present?
end
当我必须做这样的事情时,我喜欢把它看作是验证字段中是否有东西,但你也可以取一个nil值
Entrant.validates_presence_of(:foo, :allow_nil => true)
在使用Desive on customer时,我也会考虑在单独的页面上使用表单更新不同的客户字段集 我相信大多数解决方案都是可行的,但我一直在寻找最简单、最简单、最简单的方法来实现这个解决方案 就这样来了
validates :phone, :country, :postal_code, :street_address, presence: true, allow_nil: true
allow\u nil:true指示模型仅验证提交表单上存在的字段。如果您想要更多的保护,可以使用额外的参数,如:on=>:update您想根据使用的表单对记录进行不同的验证吗?
Entrant.validates_presence_of(:foo, :allow_nil => true)
validates :phone, :country, :postal_code, :street_address, presence: true, allow_nil: true