🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails 6

Ruby on Rails 6は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Q&A

解決済

1回答

1049閲覧

ActionController::UrlGenerationErrorを解決したい

kimch

総合スコア8

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails 6

Ruby on Rails 6は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

0グッド

0クリップ

投稿2021/03/09 11:53

#前提・実現したいこと
上記エラーを解決し、いいね機能を実装したい。

#エラー文
```ActionController::UrlGenerationError in Businesses#index`
Showing /Users/takayoshikanamoto/projects/C×S/app/views/likes/_like.html.erb where line #2 raised:

No route matches {:action=>"destroy", :business_id=>9, :company_id=>[14, 17, 15, 18], :controller=>"likes"}, missing required keys: [:id]

#関連コードソース ```ruby: #index.html.erb <%= render "shared/header" %> <div class="top_content"> <h1> 業務一覧 </h1> </div> <div class="middle_content"> <div class="company_information"> <% @business.each do |business|%> <%# <% link_to "#" do %> <ul class="divided_company_info"> <li class = "business_company_image"> <%= image_tag business.image, class:"business_img" %> </li> <li class = "business_company_name"> <%= %> </li> <li class="business_content"> <%= business.content%> </li> <li class="business_reward"> <%= business.reward%> </li> <div id="like-btn-<%= business.id %>"> <%= render 'likes/like', business: business, company: @company %> </div> </ul> <%# <% end %> <% end %> </div> </div> <div class="low_content"> <h1> 人気の企業一覧 </h1> ここにいいね件数の多い会社を出力する </div> <%= render "shared/footer" %>

ruby:

1#business.rb 2class Business < ApplicationRecord 3 4 belongs_to :company 5 belongs_to :student 6 has_one_attached :image 7 has_many :likes,dependent: :destroy 8 9 with_options presence: true do 10 validates :content 11 validates :department 12 validates :period 13 validates :reward 14 validates :number 15 validates :comment 16 validates :skill 17 end 18 19 def self.search(search) 20 return Business.all unless search 21 Business.where('content LIKE(?)', "%#{search}%") 22 end 23 24 def liked_by?(student) 25 likes.where(student_id: student.id).exists? 26 end 27 28end 29

ruby:

1#_like.html.erb 2<% if business.liked_by?(current_student) %> 3 <%= link_to(company_business_like_path(company.ids, business.id), method: :delete, remote: true, id: :"like-button-#{business.id}") do %> 4 <i class="fa-lg fas fa-heart icon-btn liked"></i> 5 <% end %> 6<% else %> 7 <%= link_to(company_business_likes_path(company.ids, business.id), method: :post, remote: true, id: :"like-button-#{business.id}") do %> 8 <i class="fa-lg fas fa-heart icon-btn not-like"></i> 9 <% end %> 10<% end %>
ruby: likes_controller.rb <% if business.liked_by?(current_student) %> <%= link_to(company_business_like_path(company.ids, business.id), method: :delete, remote: true, id: :"like-button-#{business.id}") do %> <i class="fa-lg fas fa-heart icon-btn liked"></i> <% end %> <% else %> <%= link_to(company_business_likes_path(company.ids, business.id), method: :post, remote: true, id: :"like-button-#{business.id}") do %> <i class="fa-lg fas fa-heart icon-btn not-like"></i> <% end %> <% end %>

ruby:

1routes.rb 2 3company_business_likes POST /companies/:company_id/businesses/:business_id/likes(.:format)  likes#create 4company_business_like DELETE /companies/:company_id/businesses/:business_id/likes/:id(.:format) likes#destroy 5

#考察
No route matches {:action=>"destroy", :business_id=>9, :company_id=>[14, 17, 15, 18], :controller=>"likes"}, missing required keys: [:id] とエラーで指摘されていることから、<%= link_to(company_business_like_path(company.ids, business.id), method: :delete, remote: true, id: :"like-button-#{business.id}") do %>の記述(パス)が誤っていると考え、変数の中を確認、rails routesでルーティングの確認をしたが解決の糸口を得られなかった。

#最後に
みなさんの知恵をお借りできたらと考えております。
お忙しいとは思いますが、何卒よろしくお願い致します。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

company_business_like_pathlikes じゃなくて like のほう)には

  • :company_id
  • :business_id
  • :id

が必要なのに

ruby

1company_business_like_path(company.ids, business.id)

のように :id に当たる第三引数を与えず使っているのが原因かなと思います。
エラーにも

missing required keys: [:id]

と書いてありますね。

ところで,companyidsid じゃなく)って何でしょう?

投稿2021/03/09 20:13

scivola

総合スコア2108

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kimch

2021/03/10 01:04

scivola様 返信ありがとうございます。 >ところで,company の ids(id じゃなく)って何でしょう? こちらなのですが、以下のように解釈しております。 `index.html.erb`ファイルにおいて、each文を使用しているが、`<% @business.each do |business|%>`とbusinessを使用しており、business一つ一つにeachで繰り返し処理を行っている。その一方で、そのeach文内にbusinessという変数ではなくcompanyという変数を使用している。(各businessに対して, それに紐づくcompnayの情報を対応させるため) その後、部分テンプレートでif文を使用した際にcompany.idと記述すると、companyの中に複数の情報が格納されているため、idではなくideと複数形で指定する様に指示されてしまう。 こういった経緯からidsと記述しておりました。
scivola

2021/03/11 12:19

(コメント投稿したつもりができてなかったことに今気づき,改めて書いてます。21:16 のコメントはミスで,削除依頼しているのでそのうち消えます) business は Company オブジェクトにぶら下がっているんですよね? company_business_like_path の第一引数に与えるべきはそれの id のはずです。それは business.company.id で得られると思います。 第三引数には,その business と current_student に結びつく Like オブジェクトの id を指定するはずです。
kimch

2021/03/12 11:06

scivola様 21:16のコメントの件、承知しました。 ご丁寧にありがとうございます。 また、scivola様のおっしゃる通り、business.company.company_idでbusinessに紐づくcompanyの情報を得ることができました! ありがとうございます! 本当に助かりました!
kimch

2021/03/12 11:17

scivola様 すみません、上記下名の記述ミスです。 business.company.idでidの値を得ることができました。 お忙しい中お付き合いいただきありがとうございました。 言葉で感謝することしかできませんが、本当にありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問