gpt4 book ai didi

mysql - 基于参数的 Rails 自定义查询

转载 作者:太空宇宙 更新时间:2023-11-03 10:52:31 25 4
gpt4 key购买 nike

我从一个 json 请求中发送了零个或多个过滤器参数。参数可能包含:

params[:category_ids"]
params[:npo_ids"]

等等

我正在尝试使用选定的 ID 从我的数据库中检索所有项目。这是我目前拥有的:

def index
if params[:category_ids].present? || params[:npo_ids].present?
@conditions = []
@ids = []
if params["category_ids"].present?
@conditions << '"category_id => ?"'
@ids << params["category_ids"].collect{|x| x.to_i}
end
if params["npo_ids"].present?
@conditions << '"npo_id => ?"'
@ids << params["npo_ids"].collect{|x| x.to_i}
end
@conditions = @ids.unshift(@conditions.join(" AND "))
@projects = Project.find(:all, :conditions => @conditions)
else ...

这确实行不通,但希望它能让您了解我正在尝试做什么。

如何根据我不确定是否存在的参数过滤我的 activerecord 查询。

也许我可以进行多个查询,然后加入它们...或者我应该在模型中放置一个 filter_by_params 方法...?

您认为这样做的好方法是什么?

最佳答案

在 rails 3 及更高版本中,您使用 ActiveRelation 对象构建查询,在您尝试访问结果之前不会执行任何 sql,即

query = Project.where(is_active: true)
# no sql has been executed
query.each { |project| puts project.id }
# sql executed when the first item is accessed

您使用的语法看起来像 rails 2 风格;希望您使用的是 3 或更高版本,如果是这样,您应该能够做类似的事情

query = Project.order(:name)
query = query.where("category_id IN (?)", params[:category_ids]) if params[:category_ids].present?
query = query.where("npo_ids IN (?)", params[:npo_ids]) if params[:npo_ids].present?

@projects = query

关于mysql - 基于参数的 Rails 自定义查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23452081/

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