2013-05-31 2 views
1

Я использую программу для входа пользователя/входа. Но когда пользователь подписывается с общедоступных страниц, создавайте перенаправления на root_path.Devise: after_sign_in_path_for (ресурс) не работает

Я пытался использовать это:

def after_sign_in_path_for(resource) 
request.referrer 
end 

Когда пользователь пытается войти в систему, он дает ошибку "не перенаправляется должным образом.

Может ли кто-нибудь сказать, как это сделать?

ответ

0

Я верю, что если я прав, что вы хотите сделать, это переопределить перенаправление при входе пользователя в систему, чтобы изменить следующий метод внутри controllers/devise/sessions_controller.rb Если вы не создали генераторные устройства, то вы generate devise controller. Сделав это вы хотите иметь что-то вроде следующего внутри вашей devise/sessions_controller.rb

def create 
    self.resource = warden.authenticate!(auth_options) 
    set_flash_message(:notice, :signed_in) if is_navigational_format? 
    sign_in(resource_name, resource) 
    # respond_with resource, :location => after_sign_in_path_for(resource) 
    if current_user.role? :administrator 
     redirect_to dashboard_path 
    else 
     redirect_to rota_days_path 
    end 
    end 

В приведенном выше примере, по умолчанию метод sessions_controller - create использует следующее: # respond_with resource, :location => after_sign_in_path_for(resource), который я закомментирована. Добавив оператор if, который проверяет, является ли роль current_users администратором. Если они затем перенаправляются на страницу панели мониторинга. Если нет, то они перенаправляются на страницу rota.

В качестве альтернативы DEViSE хелпер утверждают, что вы могли бы также сделать что-то вроде:

 def after_sign_in_path_for(resource) 
     stored_location_for(resource) || 
     if resource.is_a?(User) && resource.can_publish? 
      publisher_url 
     else 
      super 
     end 
    end 

Надеется, что это помогает.

Update

def create 
    @hospital_booking = HospitalBooking.new(params[:hospital_booking]) 

    respond_to do |format| 
     if @hospital_booking.save 
     format.html { redirect_to :back, notice: 'Photographer Shift was successfully created.' } 
     format.json { render json: @hospital_booking, status: :created, location: @hospital_booking } 
     else 
     format.html { render action: 'new' } 
     format.json { render json: @hospital_booking.errors, status: :unprocessable_entity } 
     end 
    end 
    end 

Что здесь происходит, когда hospital_booking сохраняется перенаправляет обратно на страницу выдачи вместо перенаправления на другую страницу. Далее читайте здесь: api dock- redirect_to

+0

Что такое publisher_url? если он заменит его «request.referrer», он дает ошибку «Страница не перенаправляется правильно». Как перенаправить пользователя на обратную страницу? – user2206724

+0

@ user2206724 где вы это делаете? Def after_sign_in_path_for (resource) 'это внутри' controllers/devise/session_controller.rb'. Кроме того, 'publisher_url' является всего лишь примером того, что показывает' devise_helper.rb'. – David

+0

Я определяю его контроллер приложения, он работает, если я заменю request.referrer любым другим определенным путем. Но я не хочу определенный путь, я хочу, чтобы он перенаправлялся на предыдущую/предыдущую страницу. – user2206724

Смежные вопросы