レビユーの★の数で検索する検索サービスを作っているのですが、projectsテーブルとreviewsテーブルを内部結合した結果を取得したいです。
#わからないこと
下記のエラーの解消方法がわからない
undefined method `belong_to' for #Class:0x007fdd747099b0
Extracted source (around line #113):
<ul> <% @projects.each do |project| %> <%= link_to image_tag(project.pict_path), project_path(project.id) %> <% end %>controller
ruby
1def index 2 if params[:title].present? && params[:star].present? 3 @projects = Project.where(title: params[:title]).page(params[:page]).per(PER) 4 elsif params[:title].present? 5 @projects = Project.where(:title => params[:title]).page(params[:page]).per(PER) 6 elsif params[:star].present? 7 @projects = Project.joins(:reviews).where(:star => params[:star]).page(params[:page]).per(PER) 8 else 9 @projects = Project.page(params[:page]).per(PER) 10 end 11end
models
ruby
1class Review < ActiveRecord::Base 2 belong_to :projects 3 self.table_name = 'reviews' 4end
ruby
1class Project < ActiveRecord::Base 2 3 has_many :reviews 4 5 validates :title, 6 presence: { message: "入力してください" }, 7 length: { minimum: 3, message: "3文字以上必要"} 8end 9
view
ruby
1<%=form_tag({ :controller => 'projects', :action => 'index' }, 2{ :method => :get}) do %> 3<%= label_tag(:q, "Search for:") %> 4<%= text_field_tag 'title' %> 5<br> 6<br> 7<%= label_tag(:q, "★ 5以上") %> 8<%= radio_button_tag 'star', '5' %> 9<br> 10<%= label_tag(:q, "★ 4以上") %> 11<%= radio_button_tag 'star', '4' %> 12<br> 13<%= label_tag(:q, "★ 3以上") %> 14<%= radio_button_tag 'star', '3' %> 15</p> 16<p> 17</p> 18<%= submit_tag("Search") %> 19<p> 20<% end %> 21<ul> 22 23 24<% @projects.each do |project| %> 25<%= link_to image_tag(project.pict_path), project_path(project.id) %> 26 27<% end %> 28<%= paginate @projects %> 29
追記:
@projects = Project.joins(:reviews).where(:star => params[:star])
だと
生成されるSQLは、
SELECT "projects".* FROM "projects" INNER JOIN "reviews" ON "reviews"."project_id" = "projects"."id" WHERE "projects"."star" = '5' LIMIT 3 OFFSET 0
なのですが、
SELECT "projects".* FROM "projects" INNER JOIN "reviews" ON "reviews"."id" = "projects"."item_id" WHERE "reviews"."star" = '5' LIMIT 3 OFFSET 0
を生成するにはどのように書くべきでしょうか。
追記2:
ruby
1@projects = Project.joins(:reviews).preload(:reviews).where("reviews.star >= ?" , params[:star]).page(params[:page]).per(PER)
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/04/22 06:55
2018/04/22 11:45