前提・実現したいこと
現在アプリケーションの実装中です。アプリケーション内容としましては、タグ付けしたレシピを投稿⇨トップページからタグの検索⇨タグに紐付いたレシピの表示を行いたいのですが、ビューファイルは表示されてもレシピが表示されません。
recipesテーブルにtagに紐づくカラムが存在しないことからjoinsメソッドを定義しましたが、現在も表示ができないことからjoins定義部分に不備があるのかと思います。
記述や定義方法の見直し・変更を行っても原因が明確にならず困っています。
解決方法がお分かりになる方がいらっしゃいましたら、ご教授お願い致します。
発生している問題・エラーメッセージ
メッセージは出力されていません。
該当のソースコード
routes.rb
searchはタグ付け機能実装の際に定義したメソッド
researchが今回のタグ検索機能の際に定義したメソッドです
Rails.application.routes.draw do devise_for :users root to: "recipes#index" resources :recipes do resources :comments, only: :create collection do get 'search' end collection do get 'research' end end resources :users, only: :show end
recipes_controller
ruby
1class RecipesController < ApplicationController 2 before_action :move_to_index, except:[:index, :show, :research] 3 ~~~省略~~~ 4 def research 5 @recipes = Recipe.research(params[:keyword]) 6 end 7 private 8 9 def recipe_params 10 params.require(:recipes_tag).permit(:title, :material, :text, :category_id, :time_require_id, :image, :name, :recipe_id).merge(user_id: current_user.id) 11 end 12 13 def move_to_index 14 unless user_signed_in? 15 redirect_to root_path 16 end 17 end 18end
models/recipe.rb
class Recipe < ApplicationRecord ~~~省略~~~ def self.research(research) if research != "" Recipe.joins(:recipe_tag_relations).where('text LIKE(?)', "%#{research}%") else Recipe.all end end end
views/recipes/index.html.erb
~~~省略~~~ <div class='search-bar-contents'> <%= form_with(url: research_recipes_path, local: true, method: :get, class: "search-form") do |form| %> <%= form.text_field :keyword, placeholder: "ズボラ飯", class: "sbox" %> <%= form.submit "検索", class: "sbtn" %> <% end %> </div>
views/recipes/research.rb
<div class="research-bar"> <%= form_with(url: research_recipes_path, local: true, method: :get, class: "search-form") do |form| %> <%= form.text_field :keyword, class: "sbox" %> <%= form.submit "検索", class: "sbtn" %> <% end %> </div> <div class="contents-row"> <% @recipes.each do |recipe| %> <%= render partial: "recipe", locals: { recipe: recipe } %> <% end %> </div>
migrate/~~~recipes.rb
class CreateRecipes < ActiveRecord::Migration[6.0] def change create_table :recipes do |t| t.string :title, null:false t.text :material, null: false t.text :text, null: false t.references :user, null: false, foreign_key: true t.integer :category_id, null: false t.integer :time_require_id, null: false t.timestamps end end end
migrate/~~~tags.rb
class CreateTags < ActiveRecord::Migration[6.0] def change create_table :tags do |t| t.string :name, null: false, uniquness: true t.timestamps end end end
migrate/~~~recipe_tag_relations(中間テーブル)
class CreateRecipeTagRelations < ActiveRecord::Migration[6.0] def change create_table :recipe_tag_relations do |t| t.references :tag, null: false, foreign_key: true t.references :recipe, null: false, foreign_key: true t.timestamps end end end
試したこと
researchメソッドでbinding.pryを行ったところ、
{"keyword"=>"時短レシピ", "commit"=>"検索", "controller"=>"recipes", "action"=>"research"} permitted: false>
と表示されました。
keywordに入力はできているので、レシピとの紐付けはタグ付け機能を実装した際に中間テーブル・Formオブジェクトを使用した際にできている。
recipesテーブルにtagのカラムが存在しない為、テーブル結合を行うためにjoinsメソッドを定義したのですが、原因が見つけられず困っています。
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。