gpt4 book ai didi

ruby-on-rails - rails : How do I validate against this code that I put into the lib/directory?

转载 作者:数据小太阳 更新时间:2023-10-29 08:02:06 24 4
gpt4 key购买 nike

在我放入 Rails 2.3.5 的 lib/目录中的代码中找到混合代码的正确方法有点困难。

我有几个模型需要电话验证。我至少有三个使用相同代码的模型,所以我想保持干燥并将其移至 lib/目录。我曾经在每个模型中都有这样的代码:

validate :phone_is_valid

然后我会在模型中有一个 phone_is_valid 方法:

protected
def phone_is_valid
# process a bunch of logic
errors.add_to_base("invalid phone") if validation failed
end

我将这段代码移到 lib/phones/中,在 lib/phones 中我有 lib/phones/phone_validation.rb,然后我在其中复制粘贴了 phone_is_valid 方法。

我的问题是,现在如何将其混合到我的所有模型中?我的 validate :phone_is_valid 方法是保持不变还是改变了?我想确保 errors.add_to_base 方法继续像以前一样运行,同时保持一切干燥。显然以下是行不通的:

validate :Phones::PhoneValidation::phone_is_valid(number)

我还在 lib/phones/中创建了另一个名为 lib/phones/phone_normalize.rb 的文件。同样,许多模型需要对用户输入的值进行归一化。意思是转 (555) 222-1212 到 5552221212 或类似的东西。我可以通过调用 Phones::Phone_Normalize::normalize_method(number) 来调用它吗?

我想我对以下内容感到困惑:

  • 如何使用 lib 目录来验证需要访问特定验证方法的多个模型
  • 如何将 lib 目录用于返回值的常用共享方法

最佳答案

class Profile < ActiveRecord::Base
include Phones::PhoneValidation
validate_phone_is_valid
end

如果你想将它用于许多模型,那么你可能会直接将验证修补到 ActiveRecord 中:

module ActiveRecord
module Validations
module ClassMethods
def validates_photo(*attr_names)
# ....
end
end
end
end

关于ruby-on-rails - rails : How do I validate against this code that I put into the lib/directory?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2795604/

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