sales#newへのURL直打ちを禁止しようと、root_pathへredirectさせようとしたのですが、なぜか失敗します。
本当はif文でparams[:format]がnilかどうかで、redirectするかを分けるつもりなのですが、そもそもこのredirectが効かないので、テスト用で無条件でredirectするようにしています。
ターミナル
Processing by SalesController#new as HTML Redirected to http://localhost:3000/ Completed 404 Not Found in 27ms (ActiveRecord: 9.0ms)
app/controllers/sales_controller.rb
class SalesController < ApplicationController def index end def new redirect_to root_path @reservation = Reservation.find(params[:format]) @sale = Sale.new end def create @sale = Sale.new(sale_params) if @sale.save! redirect_to reservations_path else render :new end end def edit end private def sale_params params.require(:sale).permit(:mean, :from, :reservation_id).merge(member_id: current_member.id) end end
app/models/reservation.rb
has_one :sale
app/models/sale.rb
belongs_to :reservation
config/routes.rb
Rails.application.routes.draw do resources :reservations, except: :delete resources :sales devise_for :members get 'myinfos/index' root 'myinfos#index' end
ちなみに他のアクションであればもちろんきちんとredirectします。
どうかよろしくお願いいたします。
> sales#newへのURL直打ちを禁止しようと
とはlocalhost/sales/newのページを表示させないようにするということでしょうか?
これにはどういう意図があるのでしょうか?
エラーメッセージの
Completed 404 Not Found in 27ms (ActiveRecord: 9.0ms)
は、読み解けてますか?
そうです。別のページからのリンクからのみを許可しようと思います。そのリンクから来た場合はparams[:format]に値が入っています。
params[:format]に値が入っていない場合は直打ちなので、if文で分けてredirectさせようと思うのですが、そもそもこのredirectが失敗することがわかったので、一度if文を消して試しています。
nanami12さん
ページが存在しないと理解しています。
でも他のどのアクションに同じコードをコピペしてもきちんとredirectするので困っています。
ちなみにroot以外のどのパスにしても同じ結果です。
試しに、存在しないパスを書いたらきちんとエラーになります。
回答1件
あなたの回答
tips
プレビュー