gpt4 book ai didi

ruby-on-rails - 如何使用 rails 和 postgres 改进查询

转载 作者:行者123 更新时间:2023-12-03 19:08:56 24 4
gpt4 key购买 nike

我有三个型号 posts有一个给 post_rating , post_waiting_timepost.rb

name_column      type           example 
id integer 20
name string 'welcome'
user_id integer 1
post_rating.rb
name_column      type           example 
id integer 10
rating_label enum poor,average,great
post_id integer 20
post_waiting_time.rb
name_column      type           example 
id integer 10
waiting_label enum 0-3,4-6,7-10
post_id integer 20
我尝试在查询中使用 rating_label、waiting_label eager_load , joins但不能在查询中写多标签
posts_lists = user.posts.eager_load(:post_rating, :post_waiting_time).where("post_waiting_times.waiting_label = ? ", '0-3')
此查询使用一个值很好,但我需要多查询使用 waiting_label,例如 0-3, 4-7我尝试使用 IN() but i have error
Post.eager_load(:post_rating, :post_waiting_time).where('post_waiting_times.waiting_label IN( ? )', 'more_30,0-
3')

上次查询的错误消息
ActiveRecord::StatementInvalid (PG::InvalidTextRepresentation: ERROR:  invalid input value for enum tag_label: "more_30,0-3")
LINE 1: ...ERE (post_waiting_times.waiting_label IN( 'more_30,0...
我用
rating_label 编写过滤器查询, waiting_label
posts_lists = user.posts
posts_lists.each do |record|
flag_filter = false
unless waiting_filter.empty?
flag_filter = if waiting_filter.include?(record.post_waiting_time.waiting_label)
true
else
false
end
end

unless rating_filter.empty?
flag_filter = if rating_filter.include?(record.post_rating.rating_label)
true
else
false
end
end
if flag
puts record
end

但这不是效率方式
我用 Rails 6 , PostgreSQL

最佳答案

你做错了,你可以直接在rails中传递一个数组进行比较。这是更新的查询

Post.eager_load(:post_rating, :post_waiting_time).where(post_waiting_times: {waiting_label: ['more_30','0-3']})
希望这能解决问题。

关于ruby-on-rails - 如何使用 rails 和 postgres 改进查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62857993/

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