Ruby on rails 如何仅在注册时使用rails Desive验证某些字段

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

我有一组自定义字段附加到名为Entrant的设计模型

我有两个表格,一个是登记表(三个字段),另一个是账户区(12个字段)。大多数自定义字段区域是必需的,但仅在表单中位于帐户区域

我如何做到这一点


我使用的是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