0

Deviseをアプリに統合し、ここで問題にとって重要だと思う現在のコードを統合します。

これが私のサインアウトリンクです

<nav class="round">
        <ul>
            <li>
                <%= link_to "Home", root_path%>
            </li>
            <li>
                <%= link_to "Help (learn Bunch-It)", help_path %>
            </li>
            <% if signed_in? %>
            <li>
                <%= link_to "Sign out", destroy_user_session_path, :method => :delete %>
            </li>
            <li>
                <%= link_to "Profile "+current_user.user_name, user_path(current_user), :method => :delete %>
            </li>
            <%else%>
            <li>
                <%= link_to "Sign in", new_user_session_path %>
            </li>
            <%end%>
        </ul>
    </nav>

次にroute.rb

devise_for :users

  #get "sessions/new"

  #get "session/new"

  resources :users
  #resources :sessions, :only => [:new, :create, :destroy]

  #get "users/new"

  get "pages/home"

  get "pages/contact"

  get "pages/about"

  get "pages/help"

  get "results/result"

  get 'tree/insertResult' => 'tree#insertResult'

  get "tree/deleteFolder" => 'tree#deleteFolder'

  get "tree/createFolder" => 'tree#createFolder'

  get "tree/deleteResult" => 'tree#deleteResult'

  match '/results' , :to => 'results#result'
  match '/contact' , :to => 'pages#contact'
  match '/about' , :to => 'pages#about'
  match '/help' , :to => 'pages#help'
  match '/home_index', :to => 'pages#home'
  #match '/signin', :to => 'sessions#new'
  #match '/signout', :to => 'sessions#destroy'
  root :to => 'pages#home'

これが私のコントローラー機能です。ホームページ用

class PagesController < ApplicationController

  def home
    @title = "Home"
    session[:return_to] = request.fullpath
    @page = request.path
    puts "Welcome home page"
  end
...

そして最後にこれが私のプロフィールサイトコントローラーです

class UsersController < ApplicationController
  before_filter :authenticate_user!, :only => :token

  def index

  end
  def token

  end
  def show
    @title = current_user.user_name
    @haveQuery = false
    if @newest_query = findNewestQuery
      @common_query = commonQuery
      @haveQuery = true
    else
      @haveQuery = false
    end
  end

問題は、サインアウトを押したときに、プロファイルサイトを更新するか、現在別のサイトにいる場合はプロファイルサイトに移動することです。ただし、プロフィールページではなく、アプリのホームページに移動したい。私は考えられることは何でもしましたが、解決することはできません。ちょっとしたアイデアは私へのプレゼントのようなものですか?:)

4

1 に答える 1

4

Rails3.2アプリでも同じ問題が発生しました。ルートファイルに問題があることがわかりました。それでも問題が解決しない場合は、デバイスの宝石を開いて周りを突くことをお勧めします。

  devise_for :users, :controllers => {:sessions => "user/sessions", :registrations => "user/registrations"}
  devise_scope :user do
    get '/login' => 'devise/sessions#new'
    get '/logout' => 'devise/sessions#destroy'
  end
  resources :user, :controller => "user"
  root :to => "home#index"

そして、ビューではこのようなもの

<%= link_to 'Logout', logout_path, :method => :delete %>

そして、ユーザーモデルは次のようになります

    class User
      # Include default devise modules. Others available are:
      # :token_authenticatable, :encryptable, :confirmable, :lockable, :timeoutable and :omniauthable
      devise :database_authenticatable, :registerable,
             :recoverable, :rememberable, :trackable, :validatable

      # Validations.
      validates_presence_of :email, :first_name, :last_name, :password
      validates_uniqueness_of :email, :case_sensitive => false
      attr_accessible :first_name, :last_name, :email, :password, :password_confirmation, :remember_me


     end

編集:そのようなものをチェックするための素晴らしい方法

$ rake routes
DEPRECATION WARNING: ActiveSupport::Memoizable is deprecated and will be removed in future releases,simply use Ruby memoization pattern instead. (called from <top (required)> at /Users/telmate/Documents/tmp_H/hucker/config/application.rb:20)
MongoDB logging. Please note that logging negatively impacts performance and should be disabled for high-performance production apps.
MONGODB admin['$cmd'].find({:ismaster=>1}).limit(-1)
        new_user_session GET    /users/sign_in(.:format)       user/sessions#new
            user_session POST   /users/sign_in(.:format)       user/sessions#create
    destroy_user_session DELETE /users/sign_out(.:format)      user/sessions#destroy
           user_password POST   /users/password(.:format)      devise/passwords#create
       new_user_password GET    /users/password/new(.:format)  devise/passwords#new
      edit_user_password GET    /users/password/edit(.:format) devise/passwords#edit
                         PUT    /users/password(.:format)      devise/passwords#update
cancel_user_registration GET    /users/cancel(.:format)        user/registrations#cancel
       user_registration POST   /users(.:format)               user/registrations#create
   new_user_registration GET    /users/sign_up(.:format)       user/registrations#new
  edit_user_registration GET    /users/edit(.:format)          user/registrations#edit
                         PUT    /users(.:format)               user/registrations#update
                         DELETE /users(.:format)               user/registrations#destroy
                   login GET    /login(.:format)               devise/sessions#new
                  logout GET    /logout(.:format)              devise/sessions#destroy
              user_index GET    /user(.:format)                user#index
                         POST   /user(.:format)                user#create
                new_user GET    /user/new(.:format)            user#new
               edit_user GET    /user/:id/edit(.:format)       user#edit
                    user GET    /user/:id(.:format)            user#show
                         PUT    /user/:id(.:format)            user#update
                         DELETE /user/:id(.:format)            user#destroy
                    root        /                              home#index

また、ここに私のコントローラーがあります。これは、ほとんど同じページにいるためです。

class User::SessionsController < Devise::SessionsController

  def new
    super
  end

  def create
     resource = warden.authenticate!(:scope => resource_name, :recall => "#{controller_path}#new")
     if is_navigational_format?
       if resource.sign_in_count == 1
         set_flash_message(:notice, :signed_in_first_time)
       else
         set_flash_message(:notice, :signed_in)
       end
     end
     sign_in(resource_name, resource)
     respond_with resource, :location => redirect_location(resource_name, resource)
   end  
end

class User::RegistrationsController < Devise::RegistrationsController

  def new
      super # no customization, simply call the devise implementation
    end

    def create
      begin
        super # this calls Devise::RegistrationsController#create
      rescue MyApp::Error => e
        e.errors.each { |error| resource.errors.add :base, error }
        clean_up_passwords(resource)
        respond_with_navigational(resource) { render_with_scope :new }
      end
    end

    def update
      super # no customization, simply call the devise implementation 
    end

    protected

    def after_sign_up_path_for(resource)
      new_user_session_path
    end

    def after_inactive_sign_up_path_for(resource)
      new_user_session_path
    end
end
于 2012-05-01T23:50:11.977 に答える