2015-10-30 2 views
0

Я новичок в мире Rails, но это Double render error Немного интересно. Я никогда не встречал эту проблему в PHP или ASP.NET.Rails: двойная ошибка рендеринга в действиях

Итак, у меня есть два действия в одном контроллере, который расширен через контроллер регистра Devise. Я хочу достичь этого. Если пользователь, зарегистрированный в двух действиях new_with_school и create_with_school, будет перенаправлен функцией redirect_signed_in_user.

class RegistrationsController < Devise::RegistrationsController 

    def new_with_school 
    redirect_signed_in_user 

    build_resource({}) 
    resource.build_school 
    respond_with self.resource 
    end 

    def create_with_school 
    redirect_signed_in_user 

    build_resource(sign_up_params_with_school)  
    resource.school = School.new(sign_up_params_with_school[:school_attributes]) 
    resource.school.user = resource 
    resource.role = 1 
    resource.save 

    respond_to do |format| 
     if resource.save 
     format.html { redirect_to after_sign_up_path_for(resource) } 
     format.json { render :show, status: :created, location: resource } 
     else 
     clean_up_passwords resource 
     set_minimum_password_length 
     format.html { render :new_with_school } 
     format.json { render json: resource.errors, status: :unprocessable_entity } 
     end 
    end 
    end 

    protected 

    def redirect_signed_in_user 
     redirect_to '/' if user_signed_in? 
    end 
end 

Я дал это сообщение об ошибке:

Визуализировать и/или перенаправлять были названы несколько раз в этом действии. Обратите внимание, что вы можете вызывать только рендер или перенаправление, и самое большее один раз за действие. Также обратите внимание, что ни перенаправление, ни рендер не завершают выполнение действия, поэтому, если вы хотите выйти из действия после перенаправления , вам необходимо сделать что-то вроде «redirect_to (...) и return».

Так что, похоже, в Rails я могу использовать только одну функцию переадресации в действии.

Но в этом случае, как я могу достичь этого, если пользователь вошел в систему, эти 2 действия не могут быть достигнуты зарегистрированным пользователем. Самое красивое решение будет: webapp может каким-то образом перенаправить пользователей на корневой путь (без исключения), поэтому я хочу наиболее удобное для пользователя решение.

Как это сделать? (Я прочитал код завещать, но я не могу понять, как корень Перенаправление работает)

ответ

0

Используйте это:

def redirect_signed_in_user 
     redirect_to '/' && return if user_signed_in? 
end 
+0

Да, это не подбросить какие-либо ошибки, но как я могу заставить возвращение ? Возможно, я делаю что-то неправильно, но перенаправление не работает, кажется, что рельсы не выполняют метод redirect_to. Да, 'if user_signed_in? 'Является истинным, но я не понимаю, почему рельсы, читающие следующие строки в действии, не выходят из действия после перенаправления. –

+0

просто переместите этот код в основное действие redirect_to '/' && return, если user_signed_in? . :) – Rubyrider

+0

Что вы подразумеваете под «основным действием»? :) Я думал о контроллере приложений, но ничего, мои действия все еще хотят отображать их взгляды. –