Я использую Devise и Pundit. Чтобы создать новую страницу профиля, пользователь должен получить разрешение на это. Это работает хорошо, так как я впервые реализовал его, но сегодня он просто начал действовать с сообщением об ошибке:Рендеринг и/или перенаправление вызвали несколько раз в действии
Рендер и/или перенаправлять были названы несколько раз в этом действии. Обратите внимание, что вы можете вызывать только рендер или перенаправление, и самое большее один раз за действие. Также обратите внимание, что ни перенаправление, ни рендер не завершают выполнение действия, поэтому, если вы хотите выйти из действия после перенаправления , вам необходимо сделать что-то вроде «redirect_to (...) и return».
Вот мой код из моего контроллера Application:
rescue_from Pundit::NotAuthorizedError, with: :user_not_authorized
...
private
def user_not_authorized(exception)
flash[:alert] = "Sorry, you are not authorized to perform this action."
redirect_to(request.referrer || root_path)
end
Вот мой ProfilePage контроллер:
def new
@profile_page = ProfilePage.new
authorize @profile_page
end
def create
@profile_page = ProfilePage.new(profile_page_params)
respond_to do |format|
if @profile_page.save
format.html { redirect_to @profile_page, notice: 'Profile page was successfully created.' }
format.json { render :show, status: :created, location: @profile_page }
else
format.html { render :new }
format.json { render json: @profile_page.errors, status: :unprocessable_entity }
end
end
authorize @profile_page
end
Кто-то предложил мне добавить эту строку кода ниже flash[:alert]
:
self.response_body = nil
Но теперь мой пользователь снова перенаправляется на страницу «новый профиль», а не на страницу успешного профиля. Он также сообщает пользователю, что они не уполномочены выполнять это действие, несмотря на то, что он разрешил им это делать.
как сообщение об ошибке предлагается, если у вас есть несколько 'render' /' 'redirect_to' за action' вы должны использовать ранний' return', как 'возвратного redirect_to some_path' , Проблема здесь в коде, который вы показываете, я не вижу никакой ошибки. – DevMarwen
Я добавил код из контроллера ProfilePage. Куда бы я отправил раннее возвращение? – rubyandcoffee
Где ошибка? 'new' или' create'' action' – DevMarwen