-1

私の質問は実際にはかなり単純です。ユーザーがログインしているかどうかを確認する作成アクションを作成し、ユーザーがリンクなどを持っているインデックスページをレンダリングする代わりに、ダッシュボードにリダイレクトされるかどうかを確認するにはどうすればよいですか。にサインアップします。また、以下のコードが機能しないのはなぜですか。

クラスUsersController<ApplicationController

def new
  @user = User.new
end

def create
  if current_user.nil?
    redirect_to dplace_index_path
  if current_user
        @user = User.new(params[:user])
      if @user.save
          auto_login(@user)
          redirect_to dplace_index_path
  end
end
end
end
end
4

4 に答える 4

1

if ステートメントが実際にネストされているため、コードは期待どおりに機能していません (elsifこれと同じ構造が必要です。または、以下の提案された修正を参照してください)。適切にフォーマットされたコードは、実際には次のようになります。

def create
  if current_user.nil?
    redirect_to dplace_index_path
    if current_user
      @user = User.new(params[:user])
      if @user.save
        auto_login(@user)
        redirect_to dplace_index_path
      end
    end
  end
end

論理的には、最初のステートメントを入力する必要があるifため、2 番目のステートメントに進むことはありません。代わりに次のようにしてみてください。current_usernil

def create
  if current_user
    @user = User.new(params[:user])
    if @user.save
      auto_login(@user)
      redirect_to dplace_index_path
    end
  else
    redirect_to dplace_index_path
  end
end

私はコードを再配置しましたが、論理的にはあなたが今したいことをするはずです。「ハッピーパス」を最初に置き(current_user存在します)、リダイレクトをelseステートメントに移動しました。

于 2013-01-23T12:36:29.990 に答える
0
def create
  redirect_to dplace_index_path unless current_user
  # no need to check current_user again
  @user = User.new(params[:user])
  if @user.save
    auto_login(@user)
    redirect_to dplace_index_path
  end
end
于 2013-01-23T13:23:28.783 に答える
0

一般ユーザー認証:

 def create
      user = User.find_by_email(params[:email])
      if user && user.authenticate(params[:password])
        session[:user_id] = user.id
        redirect_to dashboard_url, :notice => "Logged in!"
      else
        flash.now.alert = "Invalid email or password"
        render "new"
      end
    end
于 2013-01-23T12:32:46.453 に答える
0

試す:

def create
  if current_user.blank? # .blank? will check both blank and nil
    # logic when user is not logged in
    redirect_to index_path
  else 
    # logic when user is logged in
    redirect_to dashboard_path
  end
end
于 2013-01-23T12:32:47.940 に答える