0

そこで、スプラッシュページを作成し、この投稿ごとにリダイレクトを設定しました。しかし、それはアプリを台無しにしています。以下のコードを配置すると、アプリはユーザーから送信されたメールアドレスを保存しません。(リダイレクトコードをコメントアウトすると、すべて正常に機能します。)

class ApplicationController < ActionController::Base
  protect_from_forgery
  include SessionsHelper

   before_filter(:except => :splash) do
     redirect_to root_path
   end

 end

これがコントローラーです。Railscast#124に基づいています。したがって、スプラッシュページの場合、ユーザーはサインインしていません。つまり、招待状が保存された後、保存して「準備ができたら通知します」と点滅する必要があります。ただし、上記のフィルターを設定すると、「新規」が再レンダリングされます。

class InvitationsController < ApplicationController

  def new
    @invitation = Invitation.new
  end

  def create
    @invitation = Invitation.new(params[:invitation])
    @invitation.sender = current_user
    if @invitation.save
      if signed_in?
        UserMailer.invitation(@invitation).deliver
        flash[:notice] = "Thank you, invitation sent."
        redirect_to hunts_path      
      else
        flash[:notice] = "Thank you, we will notify when we are ready."
        redirect_to root_path  
      end
    else
      render :action => 'new'
    end
  end

end

私が間違っていることについて何か考えはありますか?

4

1 に答える 1

2

うーん、わかりませんが、@invitation.senderを現在のユーザーに設定し、保存した後、をテストしsigned_in?ます。ユーザーがサインインしていない場合、招待状を保存できない可能性がありますか?

編集:申し訳ありませんが、リダイレクトを削除するとすべてが正常に機能するとおっしゃっていました。このリダイレクトにより、他のアクションが何も実行できなくなると思います(ただし、リダイレクトは1回しか許可されていません)。

于 2012-04-12T14:48:18.187 に答える