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

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

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

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

Ruby on Rails

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

Q&A

解決済

1回答

1207閲覧

@post.post_id でない理由【Rails】

kazuki_user

総合スコア147

Ruby

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

Ruby on Rails

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

0グッド

0クリップ

投稿2020/06/06 08:10

編集2020/06/06 13:19

Rails

1<h3>Comments</h3> 2<% if @post.comments.any? %> 3 <ul> 4 <% @post.comments.each do |comment| %> 5 <li> 6 <%= comment.body %> 7 <%= link_to '[DELETE]', 8 post_comment_path(@post.id, comment.id), 9 method: :delete, 10 class: 'command', 11 data: {confirm: 'sure?'} 12 %> 13 </li> 14 <% end %> 15 </ul> 16<% end %>

(show.html.erb)


上記コード8行目、post_comment_path(@post.id, comment.id)について質問です。

ルーティングにて、DELETE postsのIDは 『:post_id』なのに、
何故 上記コードでは**@post.id**なのでしょうか?


 postsのIDが 『:id』の時に**@post.id**であり、

:post_id』の時は**”@post.post_id”**のようになる、と思っていました。


以下、ルーティングです。
@post.post_idに対して、僕の認識に誤りがあれば教えて頂けると嬉しいです。

routes

1post_comment GET /posts/:post_id/comments/:id(.:format) comments#show 2 PATCH /posts/:post_id/comments/:id(.:format) comments#update 3 PUT /posts/:post_id/comments/:id(.:format) comments#update 4 DELETE /posts/:post_id/comments/:id(.:format) comments#destroy

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

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

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

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

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

guest

回答1

0

ベストアンサー

ルーティングとモデルは別だから

省略しない場合は

ruby

1post_comment_path(post_id: @post.id, id: comment.id)

となります。

投稿2020/06/06 08:22

asm

総合スコア15147

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

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

kazuki_user

2020/06/06 10:29 編集

_path(モデル: ルーティング)ですか? DELETE /posts/:post_id/comments/:id(.:format) = DELETE /モデル名/ルーティング/モデル名/ルーティング/  なのでしょうか? ーーーーーーーーーーーーーーーーーーーーーー PATHに対して、何を指定すべきかを教えて頂けると幸いです。 いつもご返信ありがとうございます。
asm

2020/06/06 11:32 編集

その例ですと DELETE /モデルの名前/:パラメータの名前1/モデルの名前/:パラメータの名前2 _path(パラメータの名前: パラメータ) → params[:パラメータの名前]=パラメータ _path(パラメータ1,パラメータ2)→params[:パラメータの名前1]=パラメータ1,params[:パラメータの名前2]=パラメータ2 であり、これらパラメータやコントローラ・アクションの対応付を行うのがルーティングです。 なお、今回の例にはモデルの名前というのも出しましたが、 「モデルの名前を用いる事もある」(モデルの名前と一緒にしとくと嬉しい時もある)が正しく 場合によっては単なる任意の文字列です。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問