#ActionController::UrlGenerationErrorの解決をしたい
現在、個人でアプリを開発しているのですが、上記の様な現象が起きており、皆様の知恵をお借りしたく投稿させていただきます。
#version
ruby 2.6.5
rails 6.0.3.5
#コード
ruby
1business.rb 2 3class Business < ApplicationRecord 4 5 belongs_to :company 6 belongs_to :student 7 has_one_attached :image 8 has_many :likes,dependent: :destroy 9 10 with_options presence: true do 11 validates :content 12 validates :department 13 validates :period 14 validates :reward 15 validates :number 16 validates :comment 17 validates :skill 18 end 19 20 def self.search(search) 21 return Business.all unless search 22 Business.where('content LIKE(?)', "%#{search}%") 23 end 24 25 def liked_by?(student) 26 likes.where(student_id: student.id).exists? 27 end 28 29end 30
ruby
1likes_controller.rb 2 3class LikesController < ApplicationController 4 before_action :authenticate_user! 5 before_action :set_business 6 7 def create 8 business = Business.find(params[:business_id]) 9 student = current_student 10 like = Like.create(business_id: business.id, student_id: student.id) 11 end 12 13 def destroy 14 business = Business.find(params[:business_id]) 15 student = current_student 16 like = Like.find_by(business_id: business.id, student_id: student.id) 17 like.delete 18 end 19 20 private 21 def set_business 22 @business = Business.find(params[:business_id]) 23 end 24 25end 26
ruby
1index.html.erb 2 3<%= render "shared/header" %> 4 5 <div class="top_content"> 6 <h1> 7 業務一覧 8 </h1> 9 </div> 10 11 <div class="middle_content"> 12 <div class="company_information"> 13 <% @business.each do |business|%> 14 <%# <% link_to "#" do %> 15 <ul class="divided_company_info"> 16 <li class = "business_company_image"> 17 <%= image_tag business.image, class:"business_img" %> 18 </li> 19 <li class = "business_company_name"> 20 <%= %> 21 </li> 22 <li class="business_content"> 23 <%= business.content%> 24 </li> 25 <li class="business_reward"> 26 <%= business.reward%> 27 </li> 28 <div id="like-btn-<%= business.id %>"> 29 <%= render 'likes/like', business: business %> 30 </div> 31 </ul> 32 <%# <% end %> 33 <% end %> 34 </div> 35 </div> 36 37 <div class="low_content"> 38 <h1> 39 人気の業務一覧 40 </h1> 41 ここにいいね件数の多い会社を出力する 42 </div> 43 44 45<%= render "shared/footer" %>
routes
1ルーティング 2 3resources :companies, only: [:index, :show, :edit] do 4 resources :businesses, only: [:index, :new, :create] do 5 resources :likes, only:[:create, :destroy] 6 end 7 end
ruby
1_likes.html.erb 2 3<% if business.liked_by?(current_student) %> 4 <%= link_to(company_business_like_path(business.id), method: :delete, remote: true, id: :"like-button-#{business.id}") do %> 5 <i class="fa-lg fas fa-heart icon-btn liked"></i> 6 <% end %> 7<% else %> 8 <%= link_to(company_business_likes_path(business.id), method: :post, remote: true, id: :"like-button-#{business.id}") do %> 9 <i class="fa-lg fas fa-heart icon-btn not-like"></i> 10 <% end %> 11<% end %>
#エラーコード
ActionController::UrlGenerationError in Businesses#index Showing /Users/takayoshikanamoto/projects/C×S/app/views/likes/_like.html.erb where line #6 raised: No route matches {:action=>"create", :company_id=>9, :controller=>"likes"}, missing required keys: [:business_id]
#試したこと
エラー画面にて出力されている通り、部分テンプレートファイル内のlink_to(company_business_likes_path(business.id)
の`(business.id)において、business_idに紐づくキーが存在していないことが原因ではないかと考え、以下の作業をした。
1、エラー画面にて、@businessの中身を確認し、business_idとその値が存在することを確認した。
2、business.idにより、9というIDが出力されることも確認した。
上記から、business.idで値が出力されているため、必要な情報は与えられているのでは?と考えた。
また、記述等に誤りがないかも調べたがやはり解決できなかった。
非常に読みにくい文章となったしまいましたが、
何卒、よろしくお願い申し上げます。
#参考にした記事
https://qiita.com/soehina/items/a68ab66da3ea1d260301
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/03/05 06:38