前提
自分の音域に合わせて曲を表示するシステムを作っています。
postとuserにはどちらもmin_sound、max_soundが設定されており、ユーザーのmin_sound以上max_sound以下だけの曲を表示する際に以下のエラーメッセージが発生しました。
実現したいこと
ここに実現したいことを箇条書きで書いてください。
- 自分の音域に合わせて曲を表示する
発生している問題・エラーメッセージ
曲を表示する際に以下のエラーメッセージ が発生しました。
ActiveRecord::StatementInvalid in StaticPages#home music_app/app/views/posts/_posts.html.erb where line #2 raised: SQLite3::SQLException: unrecognized token: ":": SELECT "posts".* FROM "posts" WHERE (min_sound_id: > 1 and max_sound_id: < 16) ORDER BY "posts"."created_at" DESC LIMIT ?
該当のソースコード
min_sound_idとmax_sound_idはmin_sound、max_soundモデルがそれぞれあり、usersとpostsどちらも外部キーに設定してあります。
ruby
1#static_pages_controller.rb 2class StaticPagesController < ApplicationController 3def home 4@posts=Post.all.order(created_at: "desc").limit(10) 5if current_user 6 @user=User.find(current_user.id) 7 @min_sound = @user.min_sound.name 8 @max_sound = @user.max_sound.name 9 @easysongposts = @posts.where("(min_sound_id: > ?) and (max_sound_id: < ?)",@user.min_sound.id,@user.max_sound.id).order("created_at DESC").limit(10) 10end 11end 12end
ruby
1#home.html.erb 2<% if logged_in? %> 3 <%= render 'posts/posts', heading:"歌いやすい曲 #{@min_sound} 〜 #{@max_sound}", posts: @easysongposts,link: "/users/easysong/#{@user.id}" %> 4<% end %> <!-- logged_in? -->
ruby
1#user.rb 2class User < ApplicationRecord 3 belongs_to :max_sound 4 belongs_to :min_sound 5end
ruby
1#post.rb 2class Post < ApplicationRecord 3 belongs_to :max_sound 4 belongs_to :min_sound 5end
ruby
1#_posts.html.erb 2<h2 class="heading"><%= heading %></h2> 3<% if posts.blank? %> 4 <div class="post-nil"> 5 <h3>まだありません</h3> 6 </div> 7<% else %> 8 <div class="posts"> 9 <% posts.first(10).each do |post| %> 10 <div class="post"> 11 12 <%= link_to post,target: "" do %> 13 14 <%= image_tag post.picture.url if post.picture? %> 15 <% end %> <!-- link_to post --> 16 <div class="post-top"> 17 <p class="post-title"><%= link_to post.title.truncate(30),post,target: "" %></p> 18 <p class="post-title"><%= link_to post.singer.truncate(30),post,target: "" %></p> 19 20 </div> <!-- post-top --> 21 <div class="post-bottom"> 22 23 <p class="heart-count"><%= post.likes.count %>件いいね</p> 24 </div> <!-- post-bottom --> 25 </div><!-- post --> 26 <% end %><!-- each--> 27 </div> <!--posts --> 28 <h3 class ="read-more"><%= link_to "もっと見る", link,target: "" %></h3> 29<% end %>
ruby
1Rails.application.routes.draw do 2root 'static_pages#home' 3get 'users/easysong/:id', to: 'users#easysong' 4resources :posts
試したこと
ここに問題に対して試したことを記載してください。
static_pages_controller.rbの@easysongposts = @posts.where("(min_sound_id: > ?) and (max_sound_id: < ?)",@user.min_sound.id,@user.max_sound.id).order("created_at DESC").limit(10)のwhere文をなくしたところ曲が新着順に表示されたので、where文に問題があると考えています。
補足情報(FW/ツールのバージョンなど)
rails5.1.6
回答2件
あなたの回答
tips
プレビュー