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

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

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

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

Ruby on Rails

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

リダイレクト

プログラムの入力元や出力先を通常とは別の場所に転送させることをリダイレクトと呼びます。

Q&A

解決済

1回答

4677閲覧

Rils 手打ち遷移をしないようにしたい。(edit画面に入る前にリダイレクトされてしまう。)

shimoner

総合スコア3

Ruby on Rails 5

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

Ruby on Rails

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

リダイレクト

プログラムの入力元や出力先を通常とは別の場所に転送させることをリダイレクトと呼びます。

0グッド

0クリップ

投稿2020/06/19 14:49

課題「にURLを入力しても、他の投稿者が投稿した編集画面には遷移できないように設定してください」

というお題があるのですが、自分で調べてみてやってみて、usersのeditは手打ちを防止できたのですが、
booksのほうがSHOWからeditボタンを押してeditにはいる【edit画面で別のユーザーid_pathをアドレスバーに打ちたかった)前にroot_pathへリダイレクトされてしまします。
どちらもやっていることは同じなのになぜ、booksの方だけできないのかわかりません。
ご回答お願いいたします。

問題を要約すると

  • 編集画面を手打ちで別IDへ遷移しないようにしたい
  • userとbookのコントローラーにbefore_action :correct_user, only: [:edit, :update]を入れた。
  • Userはできた
  • bookはなぜか編集ページに入る前にリダイレクトされるようになった。
  • この差と解決方法が分からない

root.rb

Rails.application.routes.draw do root 'homes#top' get 'home/about' => 'homes#about' devise_for :users, controllers: { sessions: 'users/sessions', registrations: 'users/registrations' } # For details on the DSL available within this file, see http://guides.rubyonrails.org/routing.html resources :users, only: [:show, :index, :edit,:create,:update] resources :books, only: [:show, :index, :edit,:create,:update,:destroy] end

users_controller.eb(こっちはeditページに入りアドレスに別ID入力し、root_pathへリダイレクト成功)

class UsersController < ApplicationController before_action :correct_user, only: [:edit, :update] before_action :authenticate_user! def show @user = User.find(params[:id]) @book = Book.new @books = Book.where(user_id: @user.id) end def edit @user = User.find(params[:id]) end def index @user = User.find(current_user.id) @users = User.all @book = Book.new end def update @user = User.find(params[:id]) if @user.update(user_params) redirect_to user_path(@user.id),notice: "You have updated user successfully." else render :edit end end private def user_params params.require(:user).permit(:name, :introduction,:profile_image) end private def correct_user user = User.find(params[:id]) if current_user != user redirect_to root_path end end end

books_controller.rb(こっちはeditにすら入れないrootへリダイレクトされる)

class BooksController < ApplicationController before_action :correct_user, only: [:edit, :update] before_action :authenticate_user! def show @book = Book.new @book_show = Book.find(params[:id]) end def index @user = User.find(current_user.id) @books = Book.all @book = Book.new end def create @user = User.find(current_user.id) @books = Book.all @book = Book.new(book_params) @book.user_id = current_user.id if @book .save redirect_to book_path(@book.id),notice: "You have creatad book successfully." else render :index end end def edit @book = Book.find_by(params[:id]) end def destroy book = Book.find(params[:id]) book.destroy redirect_to books_path end def update @book = Book.find(params[:id]) if @book.update(book_params) redirect_to book_path(@book.id),notice: "You have updated book successfully." else render :edit end end private def book_params params.require(:book).permit(:title, :body) end private def correct_user book = Book.find(params[:id]) if current_user != book.user_id redirect_to root_path end end end

bookのshow.html.erb

<%=render'users/user_info', book: @book, user: @book_show.user %> <div class=col-md-9> <h2>Book detail</h2> <table class="table table-hover "> <tbody> <tr> <td><%= attachment_image_tag @book_show.user, :profile_image, :fill,40, 40, format: 'jpeg', class: "img-circle pull-left profile-img", fallback: "no_image.jpg" %> <%= link_to "#{@book_show.user.name}",user_path(@book_show.user.id) %></td> <td><%= @book_show.title %></td> <td><%= @book_show.body %></td> <% if @book_show.user.id == current_user.id %> <td><%= link_to "Edit", edit_book_path(@book_show.id) ,class: "btn btn-success"%></td> <td><%= link_to "Destroy", books_path,notice: "Book was successfully destroyed.", method: :delete, data: { confirm: '本当に消しますか?'} ,class: "btn btn-danger" %></td> <% end %> </tr> </tbody> </table> </div>

userのShow.html.erb

<%=render'users/user_info', book: @book, user: @user %> <div class=col-md-9> <h2>Books</h2> <table class="table table-hover "> <thead> <tr></th> <th> <th>title</th> <th>opinion</th> </tr> </thead> <tbody> <% @books.each do |book| %> <tr> <td><%= attachment_image_tag @user, :profile_image, :fill,40, 40, format: 'jpeg', class: "img-circle pull-left profile-img", fallback: "no_image.jpg" %></td> <td><%= link_to "#{book.title}",book_path(book.id) %></tb> <td><%= book.body %></tb> </tr> </tbody> <% end %> </table> </div>

どちらのShowページもeditページも

before_action :correct_user, only: [:edit, :update]

を入力しなければ開けますので、books_controllerの方が原因かと予想しております。。

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

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

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

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

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

guest

回答1

0

ベストアンサー

if current_user.id != book.user_id
です

投稿2020/06/21 08:16

winterboum

総合スコア23567

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

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

shimoner

2020/07/08 05:47

ありがとうございます。助かりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問