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

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

ただいまの
回答率

88.92%

missing required keys: [:id]というエラーで困っています。

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 1,284

Taigaaaaaa

score 10

missing required keys: [:id]というエラーで困っています。

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

ActionController::UrlGenerationError in StaticPages#home
Showing /home/ec2-user/environment/matching_app/app/views/layouts/_header.html.erb where line #9 raised:

No route matches {:action=>"show", :controller=>"accounts"}, missing required keys: [:id]

該当のソースコード

_header.html.erb

<header class="navbar navbar-fixed-top navbar-inverse">
    <div class ="container">
        <%= link_to "matching app", root_path, id: "logo" %>
        <% if account_signed_in? %>
            <nav>
                <ul class="nav navbar-nav navbar-right">
                    <li><%=link_to '使い方', '/howto' %></li>
                    <li><%=link_to '友達一覧', '/accounts/index' %></li>
                    <li><%=link_to '自分のプロフィール', profile_path %></li>
                    <li><%=link_to '設定', edit_account_registration_path %></li>
                    <li><%=link_to 'ログアウト', destroy_account_session_path, method: :delete %></li>
                </ul>
            </nav>
        <% else %>
            <nav>
                <ul class="nav navbar-nav navbar-right">
                    <li><%=link_to 'アカウント作成', new_account_registration_path %></li>
                    <li><%=link_to 'ログイン', new_account_session_path %></li>
                </ul>
            </nav>
        <% end %>


    </div>




</header>
<% if account_signed_in? %>
    <div class="status-message" >
        <p>XXXXXX</p>
    </div>
<% end %>


accounts_controller.erb

class AccountsController < ApplicationController

   def index
       @accounts = Account.all
   end

   def show
      @account = Account.find(params[:id])
   end


end


routes.rb

Rails.application.routes.draw do


  devise_for :accounts
  get 'static_pages/home'
  # For details on the DSL available within this file, see https://guides.rubyonrails.org/routing.html

  root "static_pages#home"
  get "/home" => "static_pages#home"
  get "/howto" => "static_pages#howto"
  get "/accounts/sign_up" => "devise/registrations#new"
  get "/accounts/index" => "accounts#index"
  get "/accounts/profile/:id", to: "accounts#show", as: "profile"
  resources :accounts


end


account.rb

class Account < ApplicationRecord
  # Include default devise modules. Others available are:
  # :confirmable, :lockable, :timeoutable, :trackable and :omniauthable
  devise :database_authenticatable, :registerable,
         :recoverable, :rememberable, :validatable
  has_many :active_relationships,
          class_name:  "Relationship",
          foreign_key: "follower_id",
          dependent:   :destroy
end


application_record.rb

class ApplicationRecord < ActiveRecord::Base
  self.abstract_class = true
end


rake routesをすると...

Controller#Action
        new_account_session GET    /accounts/sign_in(.:format)       devise/sessions#new
            account_session POST   /accounts/sign_in(.:format)       devise/sessions#create
    destroy_account_session DELETE /accounts/sign_out(.:format)      devise/sessions#destroy
       new_account_password GET    /accounts/password/new(.:format)  devise/passwords#new
      edit_account_password GET    /accounts/password/edit(.:format) devise/passwords#edit
           account_password PATCH  /accounts/password(.:format)      devise/passwords#update
                            PUT    /accounts/password(.:format)      devise/passwords#update
                            POST   /accounts/password(.:format)      devise/passwords#create
cancel_account_registration GET    /accounts/cancel(.:format)        devise/registrations#cancel
   new_account_registration GET    /accounts/sign_up(.:format)       devise/registrations#new
  edit_account_registration GET    /accounts/edit(.:format)          devise/registrations#edit
       account_registration PATCH  /accounts(.:format)               devise/registrations#update
                            PUT    /accounts(.:format)               devise/registrations#update
                            DELETE /accounts(.:format)               devise/registrations#destroy
                            POST   /accounts(.:format)               devise/registrations#create
          static_pages_home GET    /static_pages/home(.:format)      static_pages#home
                       root GET    /                                 static_pages#home
                       home GET    /home(.:format)                   static_pages#home
                      howto GET    /howto(.:format)                  static_pages#howto
           accounts_sign_up GET    /accounts/sign_up(.:format)       devise/registrations#new
             accounts_index GET    /accounts/index(.:format)         accounts#index
                    profile GET    /accounts/profile/:id(.:format)   accounts#show
                   accounts GET    /accounts(.:format)               accounts#index
                            POST   /accounts(.:format)               accounts#create
                new_account GET    /accounts/new(.:format)           accounts#new
               edit_account GET    /accounts/:id/edit(.:format)      accounts#edit
                    account GET    /accounts/:id(.:format)           accounts#show
                            PATCH  /accounts/:id(.:format)           accounts#update
                            PUT    /accounts/:id(.:format)           accounts#update
                            DELETE /accounts/:id(.:format)           accounts#destroy

railsを勉強して自分のアプリを作ろうとした時に起きた問題です。
「idが渡されていない」という事が問題だと思うのですが、具体的に自分がどのようにしてコードを書くべきなのかが良くわからなかったため投稿させていただきました。
よろしくお願いします。

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

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

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

0

profile_path 
edit_account_registration_path

といった単数形の path はある特定の Profile、AccountRegistration を操作するものです。
ですので、これらは 特定 のためのパラメータが必要です。

モデルの定義が載っていないので推定ですが、どのprofileかというと、current_userのprofileかと思います。すると
profile_path(current_user.profile) とするのかな。

edit_account_registration_path ですが、これ routesにあります?
accountsの情報の修正だと思うのですが、、、
edit_account_path(current_user.profile) なのでは?

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

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

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

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2020/01/17 09:39

    deviseを使っている想定で話しますが
    モデル名が Account なので
    current_user ではなく current_account では?

    キャンセル

  • 2020/01/17 09:44

    <li><%=link_to '自分のプロフィール', profile_path(id: current_account.id) %></li>

    キャンセル

  • 2020/01/17 10:27

    お二方ありがとうございました!できました。ちなみにMugheartさんのコードで上手くいきました。

    キャンセル

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

  • ただいまの回答率 88.92%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

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