gpt4 book ai didi

ruby-on-rails - 使用包含 : { in: array } 验证数组元素包含

转载 作者:行者123 更新时间:2023-12-04 06:32:40 26 4
gpt4 key购买 nike

我用 acts-as-taggable-on gem 在 User 上填充用户兴趣这样的模型

# User.rb
acts_as_taggable
acts_as_taggable_on :interests

当我填充 interest_list 时数组,我需要检查给定的值是否与常量数组匹配,以确保这些是可接受的值,就像这样
VALID_INTERESTS = ["music","biking","hike"]
validates :interest_list, :inclusion => { :in => VALID_INTERESTS, :message => "%{value} is not a valid interest" }

上面的代码返回以下错误
@user = User.new
@user.interest_list = ["music","biking"]
@user.save
=> false …. @messages={:interest_list=>["music, biking is not a valid interest"]}

我可以看到包含并没有意识到它应该遍历数组元素而不是 s 考虑为一个普通字符串,但我不确定如何实现这一点。任何的想法?

最佳答案

标准包含验证器不适用于此用例,因为它会检查相关属性是否是给定数组的成员。您想要的是检查数组的每个元素(属性)是否都是给定数组的成员。

为此,您可以创建一个自定义验证器,如下所示:

VALID_INTERESTS = ["music","biking","hike"]
validate :validate_interests

private

def validate_interests
if (invalid_interests = (interest_list - VALID_INTERESTS))
invalid_interests.each do |interest|
errors.add(:interest_list, interest + " is not a valid interest")
end
end
end

我正在获取 interest_list 的元素不在 VALID_INTERESTS通过取这两个数组的差异。

我还没有真正尝试过这段代码,所以不能保证它会起作用,但我认为解决方案看起来像这样。

关于ruby-on-rails - 使用包含 : { in: array } 验证数组元素包含,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13579357/

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