Tengo tres posts de modelos, una para 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 Intento usar rating_label, wait_label en la consulta, uso eager_load , joins pero no puede escribir varias etiquetas en la consulta.
posts_lists = user.posts.eager_load(:post_rating, :post_waiting_time).where("post_waiting_times.waiting_label = ? ", '0-3') esta consulta funciona bien con un valor, pero necesito una consulta múltiple, use la etiqueta de espera, por ejemplo 0-3, 4-7 intento usar IN() but i have error
Post.eager_load(:post_rating, :post_waiting_time).where('post_waiting_times.waiting_label IN( ? )', 'more_30,0- 3')mensaje de error para la última consulta
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... soluciono esto con una consulta de escritura para filtrar por 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 endpero esta no es una manera eficiente
yo uso Rails 6 , PostgreSQL
Lo está haciendo mal, puede pasar directamente una matriz para compararla en rieles. Aquí está la consulta actualizada
Post.eager_load(:post_rating, :post_waiting_time).where(post_waiting_times: {waiting_label: ['more_30','0-3']})Espero que esto resuelva el problema.