I have three models postshas one for 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
i try use rating_label, waiting_label in query use eager_load, joins but can't write multi label in query
posts_lists = user.posts.eager_load(:post_rating, :post_waiting_time).where("post_waiting_times.waiting_label = ? ", '0-3')
this query work good with one value but i need multi query use waiting_label for example 0-3, 4-7 i try use IN() but i have error
Post.eager_load(:post_rating, :post_waiting_time).where('post_waiting_times.waiting_label IN( ? )', 'more_30,0-
3')
error message for last query
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...
i fix this with
write query for filter by 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
but this not efficiency way
i use Rails 6, PostgreSQL