0

私は最近、Rails アプリ (フォルダー public/index.html 内) に /signin および /signup パスを使用して新しいホームページ (index.html) を実装しました。Web サイトに index.html を実装する前は、サインインまたはサインアップ後にユーザーを root_url (home.html.erb) にリダイレクトしていました。彼らがサインアウトするとき、私は彼らを root_path にリダイレクトしています。

問題は、この新しい index.html の後、ユーザーがログインまたはサインアップしようとすると、index.html にリダイレクトされることです。多くのコード編集を必要とせずに元の root_url に正常にログインさせる場所はありますか?

class SessionsController < ApplicationController

  def new
  end

  def create
    user = User.find_by_email(params[:session][:email])
    if user && user.authenticate(params[:session][:password])
      sign_in user
      redirect_to root_path
    else
      flash.now[:error] = "Invalid email/password combination"
      render 'new'
    end
  end

  def destroy
    sign_out
    redirect_to root_path
  end
end

ユーザーコントローラー

def create
    @user = User.new(params[:user])
    if @user.save
      sign_in @user
      flash[:success] = "Welcome!"
      redirect_to root_path
    else
      render 'new'
    end
  end

これは私がroutes.rbに持っているものです

root to: 'static_pages#home'
4

4 に答える 4

1

First off the only difference between root_url and root_path (and in general between foo_url and foo_path) is that the former is a full url (i.e. http://example.com/...) whereas the latter is just the path (the bit after the hostname). For a simple redirect they'll have the same result.

If public/index.html exists then that is where visits to '/', (i.e. root_path) will go.

If you want users to be sent to a different page after signup then change your redirect. For example if your routes file had

get '/home' => 'home#index', :as => :home

then redirecting to home_path would send people to the index action of the home controller.

于 2013-03-17T22:35:30.967 に答える
1

問題は、 Rails ルートをpublic/index.htmlオーバーライドしているようです。root_path

パブリック ディレクトリにroot_path呼び出されたファイルがある場合、アクセスできません。index.html

名前を別のものに変更index.htmlするか、別のパスを使用する必要がありますroot_path

編集:

もう 1 つのオプションは、root_path に 2 つの異なる erb テンプレートを用意することです。次に、root_path のコントローラー アクションで、次のようにします。

class StaticPages < ApplicationController
  def home
    if user_signed_in?
      render 'home_signed_in'
    else
      render 'home_signed_out'
    end
  end
end

次に、2 つの erb テンプレートを作成する必要があります。

/app/views/static_pages/home_signed_in.html.erb

/app/views/static_pages/home_signed_out.html.erb

また、ユーザーがサインインしているかどうかを検出するために、サンプル コードのメソッドを独自のメソッドで定義または置換する必要がありuser_signed_in?ます。削除することを忘れないでください。/public/index.html

于 2013-03-17T22:36:11.387 に答える
0

routes.rb ファイルに移動し、次の変更を行います

root :to => 'main#home_page'

config/routes.rb ファイルの root: を変更することで、任意のルートにリダイレクトできます

于 2013-03-18T23:20:57.933 に答える
0

Try to change root_path with home_ControllerName_path, where ControllerName must be the name of the controller handling the home action.

于 2013-03-17T22:33:06.260 に答える