gpt4 book ai didi

ruby-on-rails-4 - 如何在 ActiveRecord 中查询 enum 字段的多个值?

转载 作者:行者123 更新时间:2023-12-04 09:59:49 25 4
gpt4 key购买 nike

我的模型

enum status: { posted: 1, failed: 2, suspended: 3 }

我的 Controller
def filter_params
params.fetch(:mymodel, {}).
permit(
:status => []
)
end

我有像 mymodel[:status] => ["failed", "suspended"] 这样的参数

如何按状态获取所有结果是 failedsuspended
类似: Mymodel.where(status: filter_params[:status])
非常感谢!

当一个电话:
@mymodel = Mymodel.new(filter_params)

我收到此错误:
'["failed", "suspended"]' is not a valid status

最佳答案

运行查询时,您需要为 enum 属性提供序号值。所以,而不是像 'failed' 这样的字符串或 'suspended' ,您需要使用它们的整数值进行查询。

幸运的是,您可以访问一个哈希值,轻松地将所有状态映射到您的 filter_params 中的整数。哈希:

values = Mymodel.statuses.values_at(*Array(filter_params[:status]))

有了它,您可以运行查询以获取具有任何过滤状态的所有记录:
Mymodel.where(status: values)

不过,您不想将那段代码散布在各处,因此我建议您将其实现为模型中的范围:
class Mymodel < ActiveRecord::Base
enum status: { posted: 1, failed: 2, suspended: 3 }

scope :for_statuses, ->(values) do
return all if values.blank?

where(status: statuses.values_at(*Array(values)))
end
end

请注意 return all if values.blank?线可以投入 nil或一个空数组而不会破坏您的查询。

您现在可以轻松查询记录:
Mymodel.for_statuses(filter_params[:status])

请注意,您不能创建具有多个状态的记录。 enum只限制可以赋值的值,但只能赋值一个,否则得到 not a valid status错误。

the Rails documentation更多信息 enum .

关于ruby-on-rails-4 - 如何在 ActiveRecord 中查询 enum 字段的多个值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28271594/

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