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

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

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

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

Ruby

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

Ruby on Rails

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

ルーティング

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

Q&A

1回答

1108閲覧

ルーティングの構成について

yume0409

総合スコア45

Ruby on Rails 5

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

Ruby

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

Ruby on Rails

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

ルーティング

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

0グッド

0クリップ

投稿2020/02/06 07:24

編集2020/02/07 06:04

初歩的なお話ですみません。
twitterのような簡易アプリを作成しているのですが、ルーティングの構成で躓いてしまいました。
削除を実装しようとしていた所です。
削除のビューへ飛んだら

DELETE /tweets/:id(.:format) tweets#destroy

こちらにパスされます。
ここまでは問題なくできているのですが、画面の左上のリロードするマークを押してリロードすると
showアクションが動き出すので、show.html.hamlに記述した内容が反映されます。
何故、showが動くのでしょうか?
showは詳細を実装する時に使うと思っていたのですが・・・(今回の内容では詳細は実装しません)
routes.rb

Rails.application.routes.draw do devise_for :users root 'tweets#index' patch '/tweets/:id/edit', to: 'tweets#update' resources :tweets do resources :comments, only: [:index, :create] end end

ルーティングはこのようになっています。
今は、resources :tweets doにしていますが、使わないアクションがいくつかあるので
全て実装終わった時に変更しようと思っていますが、これが原因だったりしますでしょうか?

かなり初歩的な質問ですが、ご回答頂けると助かります。
よろしくお願いします。

#補足

def destroy tweet = Tweet.find(params[:id]) if tweet.user_id == current_user.id tweet.destroy end end

destroy.html.haml

.destroy .destroy2 削除できました = link_to "戻る", "/", class: "destroy3"

index.html.haml

.chatmain - @tweets.each do |tweet| .tweets .name = tweet.user.name .messa = tweet.text = link_to "返信", "tweets/#{tweet.id}/comments", class: "comments" - if user_signed_in? && current_user.id == tweet.user_id = link_to "編集", "/tweets/#{tweet.id}/edit", method: :get, class: "edit" = link_to "削除", "/tweets/#{tweet.id}", method: :delete, class: "delete" .time = tweet.created_at.strftime("%Y/%m/%d %H:%M") .tweets2 = link_to new_tweet_path do %i.fas.

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

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

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

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

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

Youichi256

2020/02/06 08:07

タグの「ルーティング」は、今回の質問とは違いそうです。
no1knows

2020/02/06 11:00

> 削除のビューへ飛んだら というところが不思議な表現となっていますがどのようなことでしょうか? またTweetsコントローラーのdestroyアクションを追記していただけるとより適切な答えがつくと思います。
yume0409

2020/02/07 04:56

チャットメインのビューから削除ボタンを押して、削除アクションのビューが表示されたリロードするとshowアクションが動いてshowのビューが表示されると言った形です。
winterboum

2020/02/07 05:09

そのviewのソースが必要ですね。
yume0409

2020/02/07 05:22

destroy.html.hamlは作っています。 中身も記述しました。
winterboum

2020/02/07 05:47

いえ、 回答するに当たり、そのソースがないと判断できないので載せてください という意味です
winterboum

2020/02/07 05:48

チャットメインのビュー も有ったほうが良さそう
no1knows

2020/02/07 06:44

回答とは別のお話ですが、rails g scaffold でできるファイルとその中身がどのような動きをしているのかをじっくり確認したほうが良い気がします。 このコマンドでできるファイルたちがRailsアプリの基本的な作り方となります。 Railsのレールに乗らず(知らず)に開発するのは、開発効率としてももったいないですし、Railsの理解やスキルの取得がかなり遅くなってしまうと思います。 もし時間が許すようであれば、新しいテストアプリを作って、下記などを参考にレールに乗ることを覚えるのも1つかと。 http://kanjihtmt.github.io/blog/2015/04/02/scaffold/ もちろん、今回のdestroyも理解ができるかと思います。
guest

回答1

0

ああ、こういうことか
チャットメインから削除を実行したら、destroy view がないというエラーになったので、destroy の viewを作った。
エラーはなくなり、destroy の画面が出た
そこでブラウザのリロードボタン(と言うのかな?)を押した
らshowになった、ということですね。

コントローラのdef destroy の最後に、
削除成功したら行って欲しい view(と flash メッセージ)
失敗したら行って欲しいview(と flash メッセージ)
権限が無いときに行って欲しいview(と flash メッセージ)
を定義するのが普通です。destroyのviewは作りません
例えば

def destroy @tweet = Tweet.find(params[:id]) if tweet.user_id == current_user.id if @tweet.destroy flash[:info] = "削除成功" render action: :index else flash[:alert] = "失敗" render action: :show end else flash[:alert] = "権限なし" render action: :show end end

投稿2020/02/07 06:00

winterboum

総合スコア23329

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

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

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

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問