Я новичок в мире 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 может каким-то образом перенаправить пользователей на корневой путь (без исключения), поэтому я хочу наиболее удобное для пользователя решение.
Как это сделать? (Я прочитал код завещать, но я не могу понять, как корень Перенаправление работает)
Да, это не подбросить какие-либо ошибки, но как я могу заставить возвращение ? Возможно, я делаю что-то неправильно, но перенаправление не работает, кажется, что рельсы не выполняют метод redirect_to. Да, 'if user_signed_in? 'Является истинным, но я не понимаю, почему рельсы, читающие следующие строки в действии, не выходят из действия после перенаправления. –
просто переместите этот код в основное действие redirect_to '/' && return, если user_signed_in? . :) – Rubyrider
Что вы подразумеваете под «основным действием»? :) Я думал о контроллере приложений, но ничего, мои действия все еще хотят отображать их взгляды. –