У меня три модели posts
есть одна для post_rating
, post_waiting_time
post.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, wait_label в запросе, используйте eager_load
, joins
, но не могу написать мульти-метку в запросе
posts_lists = user.posts.eager_load(:post_rating, :post_waiting_time).where("post_waiting_times.waiting_label = ? ", '0-3')
этот запрос работает хорошо с одним значением, но мне нужно использовать несколько запросов, например, wait_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