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

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

新規登録して質問してみよう
ただいま回答率
85.48%
Ruby on Rails 5

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

Q&A

解決済

1回答

10911閲覧

リンク先の設定のエラーNo route matchesについて教えてください。

退会済みユーザー

退会済みユーザー

総合スコア0

Ruby on Rails 5

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

0グッド

1クリップ

投稿2018/01/06 08:21

編集2018/01/08 09:07

###機能を実装中に以下のエラーメッセージが発生しました。

ActionController::UrlGeneration No route matches {:action=>"edit", :controller=>"examples"}, missing required keys: [:id]

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

現在画像のようなサイトを作成中でその中でメールアイコンをクリックした時のリンク先

<%= link_to edit_example_path, :method => :GET %>

と設定した時にリンク1、リンク2をクリックした時にエラーが出ます。

しかしメールアイコンをクリックした時のリンク先を違うところに設定した時には

<%= link_to samples_path, :method => :GET do %>

リンク1、リンク2は本来のリンク先に飛ばすことができます。

###全体共通コードとして上部(青色)にしています。

app/views/layouts/

###部分共通コードとして左サイド(赤色)にしています。

/app/views/samples/_sample.html.erb

###共通にしているviews

/app/views/samples/index /app/views/samples/show /app/views/examples/index /app/views/examples/show

###リンク先

リンク1=>samples/index リンク2=>samples/index リンク3=>destroy_user_session_path メールアイコン=>edit_example_path

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

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

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

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

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

guest

回答1

0

ベストアンサー

edit_example_path には引数が必要です。

どの Exampleedit したいかを指定するため,Example のインスタンスの id を与えるのです。
エラーメッセージに

missing required keys: [:id]

とあるのはそういう意味です。

あるいは,インスタンスそのものを与えても構いません。

edit すべき Example オブジェクトが @example に入っているなら,

rb

1edit_example_path(@example)

とすれば OK です。

投稿2018/01/06 08:56

scivola

総合スコア2108

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

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

退会済みユーザー

退会済みユーザー

2018/01/06 12:11 編集

入れてみたのですが残念ながら No route matches {:action=>"edit", :controller=>"examples", :id=>nil}, missing required keys: [:id]このような結果がまだ出てしまいます。 <%= link_to edit_example_path(@example), :method => :GET do %> これではまだリンク1、リンク2がうまくリンクを飛ばすことができませんでした。。。申し訳ありませんがよろしくお願いします。 必要な情報がありましたら提示しますのでお願いします。
scivola

2018/01/06 13:40

@example が nil なのが原因でしょう。 特定の Example の修正画面にリンクしたいんですよね? その特定の Example オブジェクトを引数に与えなければなりません。
退会済みユーザー

退会済みユーザー

2018/01/06 14:14

おっしゃる通り修正画面に行きたいです。可能でしたら方法を教えてください。すみませんがよろしくお願いします。
scivola

2018/01/06 14:29

そのリンクを置きたいビューのアクションは何ですか。
退会済みユーザー

退会済みユーザー

2018/01/06 22:03

def edit @example = Example.find(params[:id]) end このアクションにしています。
scivola

2018/01/06 22:58

edit というのは編集画面を表示するアクションです。その画面に〈編集画面へ飛ばす〉リンクを表示するのはおかしいですね。
退会済みユーザー

退会済みユーザー

2018/01/06 23:20

一応ですがリンク先の画面としてはユーザーの登録情報を変更するところにしようとしています。 メールアイコンのある場所のアクションでしょうか?初心者で申し訳ありませんがよろしくお願いします。
scivola

2018/01/06 23:34

では,エラーが起こっているビューテンプレートの全体を示していただけますか。それとそのファイルのパスも(app/views/*** という形で)。
退会済みユーザー

退会済みユーザー

2018/01/07 00:37 編集

本文にコードとパスを追加させていただきました。 example、sampleがuser、bookに変わっています。 放り投げになってしまって申し訳ありませんがよろしくお願いします。 気になる点は部分共通viewsを置いている位置がapp/views/books/_list.html.erbにありそれをリンク先として設定しているのが app/views/users/edit.html.erbにしているためコントローラの設定がおかしいのかなと感じています。
scivola

2018/01/07 01:57

質問用コードはモデル名などを書き換えていたのですね。分かりにくいし転記ミスも怖いので,最初から本物のコードを掲載されたほうがよかったと思います。 さて,追記していただいたビューテンプレートですが,いくつか不可解な点があります。 問題の app/views/books/_list.html.erb ですが,どこからも読み込まれていませんね。これを読み込んでいるテンプレートがどこかにあるのではありませんか。このファイルがどう使われているかが分かれば解決に繋がると思います。 それから,app/views/users/edit.html.erb はユーザーの修正画面のはずですが,フォームを表示する部分がなく,修正画面には見えません。
退会済みユーザー

退会済みユーザー

2018/01/08 09:06 編集

ありがとうございました。
退会済みユーザー

退会済みユーザー

2018/01/08 09:05 編集

.
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問