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

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

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

POSTはHTTPプロトコルのリクエストメソッドです。ファイルをアップロードしたときや入力フォームが送信されたときなど、クライアントがデータをサーバに送る際に利用されます。

ルーティング

ルーティングとは、TCP/IPネットワークにおいて、目的のホストまでパケットを送る為のパス選定のプロセスを言います。

同期

複数のディレクトリに存在するファイルを更新した場合に、すべてのファイルにも更新が行われる事、又は、同じ記憶領域に同時にアクセスして内容の整合性が失われてしまう事をを防ぐ制御などを同期と呼びます。

保存

保存(save)とは、特定のファイルを、ハードディスク等の外部記憶装置に記録する行為を指します。

Q&A

0回答

988閲覧

正しいルーティングが読み込まれるようにしたい。(同期でのブックマーク機能実装)

shiuo

総合スコア0

POST

POSTはHTTPプロトコルのリクエストメソッドです。ファイルをアップロードしたときや入力フォームが送信されたときなど、クライアントがデータをサーバに送る際に利用されます。

ルーティング

ルーティングとは、TCP/IPネットワークにおいて、目的のホストまでパケットを送る為のパス選定のプロセスを言います。

同期

複数のディレクトリに存在するファイルを更新した場合に、すべてのファイルにも更新が行われる事、又は、同じ記憶領域に同時にアクセスして内容の整合性が失われてしまう事をを防ぐ制御などを同期と呼びます。

保存

保存(save)とは、特定のファイルを、ハードディスク等の外部記憶装置に記録する行為を指します。

0グッド

0クリップ

投稿2020/12/11 04:42

前提・実現したいこと

ブックマークができるようにしたい。

Twitterのような投稿サイトを作っています。

投稿を保存できるように、ブックマーク機能を投稿に付けたいのですが、
投稿に表示された「ブックマーク」を押すと、違うパスが読みこまれて以下のエラーが表示されます。
(※link_toメソッドで、bookmark.controllerのcreateアクションを実行したいです。)

どうしたら、正しいパスを読み込んでもらえるでしょうか。

発生している問題・エラーメッセージ

Routing Error No route matches [GET] "/plans/1/bookmarks" Rails.root: /Users/okanoshiki/projects/make_my_life Application Trace | Framework Trace | Full Trace Routes Routes match in priority from top to bottom ``` ``` **ルート** root GET / plans#index plans_search GET /plans/search(.:format) plans#search phrases GET /phrases(.:format) phrases#index POST /phrases(.:format) phrases#create new_phrase GET /phrases/new(.:format) phrases#new edit_phrase GET /phrases/:id/edit(.:format) phrases#edit phrase GET /phrases/:id(.:format) phrases#show PATCH /phrases/:id(.:format) phrases#update PUT /phrases/:id(.:format) phrases#update DELETE /phrases/:id(.:format) phrases#destroy plan_bookmarks DELETE /plans/:plan_id/bookmarks(.:format) bookmarks#destroy POST /plans/:plan_id/bookmarks(.:format) bookmarks#create bookmarks_plans GET /plans/bookmarks(.:format) plans#bookmarks plans GET /plans(.:format) plans#index POST /plans(.:format) plans#create new_plan GET /plans/new(.:format) plans#new edit_plan GET /plans/:id/edit(.:format) plans#edit plan GET /plans/:id(.:format) plans#show PATCH /plans/:id(.:format) plans#update PUT /plans/:id(.:format) plans#update DELETE /plans/:id(.:format) plans#destroy edit_user GET /users/:id/edit(.:format) users#edit user GET /users/:id(.:format) users#show PATCH /users/:id(.:format) users#update PUT /users/:id(.:format) users#update ``` ### 該当のソースコード **rute.rb** Rails.application.routes.draw do devise_for :users, controllers: { omniauth_callbacks: 'users/omniauth_callbacks', registrations: 'users/registrations' } root to: "plans#index" get 'plans/search' resources :phrases resources :plans do resources :bookmarks, only: [:create, :destroy] collection do get :bookmarks end end resources :users, only: [:show, :edit, :update] end ``` ``` **views>plans>index.html.erb <h1>トップページ</h1>** <h3>記事一覧</h3> <%= render 'search_form' %> <div> <% @plan.each do |plan| %> <%= link_to plan_path(plan) do %> <%= plan.user.nickname %> <%= plan.title %> <%= image_tag plan.image.variant(resize: '500x500') %> <%end%> <% if user_signed_in? %> <% if plan.bookmarked_by?(current_user)%> <%= link_to "ブックマークを外す", plan_bookmarks_path(plan), method: :delete %> <% else %> <%= link_to "ブックマーク", plan_bookmarks_path(plan), method: :post %> <% end %> <% end %> <%end%> </div> ``` ``` **user.rb** class User < ApplicationRecord devise :database_authenticatable, :registerable, :recoverable, :rememberable, :validatable, :omniauthable, omniauth_providers: [:facebook, :google_oauth2, :twitter] ### Association has_many :sns_credentials has_many :plans, dependent: :destroy has_one_attached :image has_many :phrases has_many :bookmarks, dependent: :destroy has_many :bookmark_plans, through: :bookmarks, source: :plan end ``` ``` **plan.rb** class Plan < ApplicationRecord extend ActiveHash::Associations::ActiveRecordExtensions belongs_to :user has_one_attached :image has_many :bookmarks, dependent: :destroy def bookmarked_by?(user) bookmarks.where(user_id: user.id).exists? end end ``` ``` **bookmark.rb** class Bookmark < ApplicationRecord belongs_to :user belongs_to :plan validates :user_id, uniqueness: { scope: :plan_id } end ``` ``` **plans.controller** class PlansController < ApplicationController before_action :authenticate_user!, except: [:index, :show] before_action :set_plan, only: [:show, :edit, :update, :destroy] def index @plans = Plan.order("created_at DESC") @plan = Plan.all @user = User.includes(:user) @q = Plan.ransack(params[:q]) @plans = @q.result(distinct: true) @categories = Category.all @seasons = Season.all @timezones = Timezone.all @places = Plan.all end def search @q = Plan.search(search_params) @plans = @q.result(distinct: true) end def new @plan = Plan.new end def create @plan = Plan.new(plan_params) if @plan.save redirect_to root_path else render :new end end def show end def edit end def update plan.update(plan_params) end def destroy plan.destroy end def bookmarks @plan = current_user.bookmark_plans.includes(:user) end end private def set_plan @plan = Plan.find(params[:id]) end def plan_params params.require(:plan).permit( :title,:concept,:item, :cost, :process,:time, :timezone_id, :place, :category_id ,:season_id, :image ).merge(user_id: current_user.id) end def search_params params.require(:q).permit(:title_or_concept_or_item_cont, :category_id_eq, :season_id_eq, :place_eq) end ``` ``` **bookmark.controller** class BookmarksController < ApplicationController before_action :authenticate_user! def create bookmark = current_user.bookmarks.build(plan_id: params[:plan_id]) bookmark.save! redirect_to plans_path end def destroy bookmark = Bookmark.find_by(plan_id: params[:plan_id], user_id: current_user.id) bookmark.destroy! redirect_to plans_path end end ``` ``` **migrate>create_bookmarks.rb** class CreateBookmarks < ActiveRecord::Migration[6.0] def change create_table :bookmarks do |t| t.references :user, foreign_key: true t.references :plan, foreign_key: true t.timestamps t.index [:user_id, :plan_id], unique: true end end end ``` ### 試したこと ①rails routesでルートを確認。  →ブックマークを保存・削除するパスは存在した。 ②ビューの表記を確認。 →ルートの記載に誤字脱字は見つからなかった。 →post、deleteのメソッドも記述されている。 ③パラメーターの確認。 エラー文の下枠でparamsをチェックしようとしたがでエラーが出ました。 NameError: undefined local variable or method `params' for #<ActionDispatch::DebugExceptions:0x00007fbf8df43f68>

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

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

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

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

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

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問