質問をすることでしか得られない、回答やアドバイスがある。

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

新規登録して質問してみよう
ただいま回答率
86.12%
Router

Routerは、異なるネットワーク同士を相互に接続するための通信機器。インターネットでのデータを自動的に振り分け、一つのインターネット回線を複数のコンピュータで使用することが可能です。DHCPによりIPアドレスを自動的に割振りすることもできます。

Ruby

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

Ruby on Rails 7

Ruby on Rails 7は、2021年12月に正式リリースされました。Ruby on Railsのバージョン7であり、フロントエンド開発環境を大幅に刷新。Node.jsを用いない構成がデフォルトになっています。

解決済

resource ルーティングのネストで、不要なアクションを作らない方法はありますか?

chasu
chasu

総合スコア21

Router

Routerは、異なるネットワーク同士を相互に接続するための通信機器。インターネットでのデータを自動的に振り分け、一つのインターネット回線を複数のコンピュータで使用することが可能です。DHCPによりIPアドレスを自動的に割振りすることもできます。

Ruby

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

Ruby on Rails 7

Ruby on Rails 7は、2021年12月に正式リリースされました。Ruby on Railsのバージョン7であり、フロントエンド開発環境を大幅に刷新。Node.jsを用いない構成がデフォルトになっています。

1回答

0リアクション

0クリップ

221閲覧

投稿2022/09/03 12:15

現在、railsで通知機能を実装していて、Routingの実装方法が分かりません。具体的には、notificationリソースにdestroy_allアクションをcollectionとして追加したいのですが、書き方が分かりません。次のように書いており、index以外の不要なnotificationリソースのアクションが生成されています。

resources :notifications, only: :index resources :notifications do collection do delete 'destroy_all' end end

また、ルーティングが原因なのか不明ですが、destroy_all メソッドを実行すると、図1のようなshowアクションを探索するエラーが発生します。コントローラーは図2のようにindexアクションへのリダイレクトを期待します。何故showアクションが探索されるのでしょうか。図3は該当するviewです。

Unknown action The action 'show' could not be found for NotificationsController
class NotificationsController < ApplicationController before_action :sign_in_required, only: :index def index #current_userの投稿に紐づいた通知一覧 @notifications = current_user.passive_notifications #@notificationの中でまだ確認していない(indexに一度も遷移していない)通知のみ @notifications.where(checked: false).each do |notification| notification.update(checked: true) end end def destroy_all #通知を全削除 @notifications = current_user.passive_notifications.destroy_all redirect_to notifications_path end end

view

<div class="grid grid-cols-1 justify-center bg-lime-100 px-3 py-3"> <div class='bg-lime-200'> <% if @notifications.exists? %> <%= link_to destroy_all_notifications_path, method: :delete do %> <p>全て削除</p> <% end %> <%= render @notifications %> <% else %> <div class="flex w-full flex-col justify-center items-center mb-48"> <span class ="relative"> <div class="h-36 w-36 bg-white rounded-full -ml-1.5 "></div> <%= image_tag 'ojigi_animal_inu.png', class:' absolute top-6 left-4 z-10 w-24 h-28 p-4' %> </span> <p class="font-medium py-2">新着の通知はありません。</p> </div> <% end %> </div> </div>

情報の不備などございましたらご指摘ください。よろしくお願いします。

以下のような質問にはリアクションをつけましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

リアクションが多い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

下記のような質問は推奨されていません。

  • 間違っている
  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

winterboum

2022/09/03 13:52

delete を使っていないなら、only に delete を追加して、そこで destroy_all すれば良いように思うのだが。routes を不必要に複雑にしてる。 Show を探してしまうのは http method が GET になってるから。 method で :delete になってますが 素のブラウザーは対応してくれない。 Rails 7ではどうやるのかわからんので、回答できない。。。。

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
86.12%

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

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

質問する

関連した質問

同じタグがついた質問を見る

Router

Routerは、異なるネットワーク同士を相互に接続するための通信機器。インターネットでのデータを自動的に振り分け、一つのインターネット回線を複数のコンピュータで使用することが可能です。DHCPによりIPアドレスを自動的に割振りすることもできます。

Ruby

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

Ruby on Rails 7

Ruby on Rails 7は、2021年12月に正式リリースされました。Ruby on Railsのバージョン7であり、フロントエンド開発環境を大幅に刷新。Node.jsを用いない構成がデフォルトになっています。