gpt4 book ai didi

ruby-on-rails - 跳过模型中的某些验证方法

转载 作者:行者123 更新时间:2023-12-03 08:53:02 25 4
gpt4 key购买 nike

我正在使用 Rails v2.3

如果我有一个 型号 :

class car < ActiveRecord::Base

validate :method_1, :method_2, :method_3

...
# custom validation methods
def method_1
...
end

def method_2
...
end

def method_3
...
end
end

正如你在上面看到的,我有 3 种自定义验证方法 ,我将它们用于模型验证。

如果我在这个模型类中有另一种方法来保存模型的新实例,如下所示:
# "flag" here is NOT a DB based attribute
def save_special_car flag
new_car=Car.new(...)

new_car.save #how to skip validation method_2 if flag==true
end

我想跳过 method_2 的验证在这种节省新车的特殊方法中, 如何跳过某些验证方法?

最佳答案

将您的模型更新为此

class Car < ActiveRecord::Base

# depending on how you deal with mass-assignment
# protection in newer Rails versions,
# you might want to uncomment this line
#
# attr_accessible :skip_method_2

attr_accessor :skip_method_2

validate :method_1, :method_3
validate :method_2, unless: :skip_method_2

private # encapsulation is cool, so we are cool

# custom validation methods
def method_1
# ...
end

def method_2
# ...
end

def method_3
# ...
end
end

然后在您的 Controller 中输入:
def save_special_car
new_car=Car.new(skip_method_2: true)
new_car.save
end

如果您收到 :flag通过 Controller 中的 params 变量,您可以使用
def save_special_car
new_car=Car.new(skip_method_2: params[:flag].present?)
new_car.save
end

关于ruby-on-rails - 跳过模型中的某些验证方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8881712/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com