如何基于参数验证Rails模型?

时间:2018-09-06 12:17:36

标签: ruby-on-rails

我有User模型,并且需要根据控制器参数验证电话号码属性。

class User < ActiveRecord::Base
  validates_presence_of :phone_number
end

此验证应在phone_number操作中验证Create。 假设我应该检查的参数是

 params[:phone_number]

3 个答案:

答案 0 :(得分:1)

您可以使用before_save验证,在用户模型中可以编写

before_save :validate_phone_number
private
def validate_phome_number
   self.phone_number = /some regex/
end

在self.phone_number中,默认情况下将获得控制器参数

答案 1 :(得分:1)

validate :custom_validation, :on => :create

private
def custom_validation
   //whatever you want to check
end

答案 2 :(得分:0)

我尝试了许多方法来完成此任务,

  1. 我使用了继承-从User类创建了一个子类
  2. 从控制器中调用模型中的方法以设置属性并将该属性与验证绑定
  3. 使用上下文选项

我想上下文选项是我所遇到的这个问题最可靠的解决方案。所以在这里,当我将上下文设置为:interface时,模型验证将仅基于该值触发

模型-User.rb

class User < ActiveRecord::Base
  validates_presence_of :phone_number, on: :interface
end

控制器-users_controller.rb

@user = User.new(user_params)
@save_result = false
if params[:invitation_token] == nil
  save_result = @user.save(context: :interface)
else
  save_result = @user.save
end

如果您在[开启]中使用多个选项:

  validates  :terms_and_conditions, acceptance: {accept: true}, on: [:create, :interface], unless: :child
  validates  :privacy_policy, acceptance: {accept: true}, on: [:create, :interface], unless: :child