Ruby on rails 特定于一个表单的Rails验证

Ruby on rails 特定于一个表单的Rails验证,ruby-on-rails,validation,Ruby On Rails,Validation,我正在开发一个web应用程序,其中用户有一个两步注册过程。在第一步之后,已经创建了用户对象。在第二步中,用户将填写更多信息。因此,我想知道如何创建特定于表单的验证。我在这里复制了我的相关代码 控制器注册\u Controller.rb后: class Users::AfterSignupController < ApplicationController before_action :authenticate_user! # after_save :user_signup_

我正在开发一个web应用程序,其中用户有一个两步注册过程。在第一步之后,已经创建了用户对象。在第二步中,用户将填写更多信息。因此,我想知道如何创建特定于表单的验证。我在这里复制了我的相关代码

控制器注册\u Controller.rb后:

class Users::AfterSignupController < ApplicationController
    before_action :authenticate_user!
    # after_save :user_signup_completed!    

    def finish
        verify_referral_code params[:referer_referral_code]

        respond_to do |format|
            format.html { render }
            format.json { render :json => { errors: resource.errors }, :status => :unprocessable_entity }
        end
    end

    protected

    def form_params
        params.permit(
            :referer_referral_code,
            :primary_email,
            :mobile_number,
            :nickname,
            :date_of_birth
        )
    end

end
我有一些可用的逻辑,但我不知道如何将验证器专门连接到此表单

因为
AfterSignUpValidator
User
模型的一部分,但它本身不是一个模型。。我真的不知道它应该从哪里继承


感谢您的指导~

在这种情况下,一种常见的方法是将此功能提取到表单对象中。对使用gem的表单对象有一个很好的概述,它运行得非常好

虽然我还没有机会使用它,但它看起来很有希望

最后,如果你有一个Railscasts Pro帐户(强烈推荐),Ryan在上做了一个很棒的插曲


希望这能有所帮助。

有时对于简单的用例,您可以定义上下文验证

它看起来像:

# in model
validates :referal_code, on: :signup.
validates :email, on: :update.

# in controller 
@user = User.new(user_params)
if user.save(:signup)
...
更多信息在或

# in model
validates :referal_code, on: :signup.
validates :email, on: :update.

# in controller 
@user = User.new(user_params)
if user.save(:signup)
...