Вы получаете сообщение об ошибке, потому что вы вызываете render
, а затем вызываете super
, внутри которого также есть рендеринг или перенаправление. Вы не можете вызывать ни рендеринг, ни перенаправление более одного раза в методе (если только он не инкапсулирован в условный оператор if).
Кроме того, вам не нужны пустые скобки для вызова метода, как в javascript.
Сейчас. Любая крупная или медленно работающая задача идеально подходит для фонового режима. И даже если вы новичок, если вы используете rails 4.2, фоновые задания в наши дни настолько просты!
Я бы использовал delayed_job, это просто и гибко. Итак, вот шаги:
<сильный>1. Добавьте delayed_job и демонов в свой gemfile и запустите установку пакета
gem 'delayed_job_active_record'
gem 'daemons'
<сильный>2. Убедитесь, что метод настройки ваших шаблонов находится в модели User
class User < ActiveRecord::Base
devise :database_authenticatable, :registerable, :confirmable,
:recoverable, :rememberable, :trackable, :validatable
def set_default_templates
### this is where all your setup code will go, remember that you're inside the object itself, so if you need to reference data stored already you'll use self, e.g. self.name or self.confirmed_at
end
handle_asynchronously :set_default_templates
end
ПРИМЕЧАНИЕ Убедитесь, что вы добавили строку handle_asyncronously с именем вашего метода. Это сообщает модели, что этот метод ВСЕГДА следует вызывать с помощью ActiveJob (это оболочка, которая позволяет вы используете любую фоновую службу, которую хотите, но ваш код не меняется в режиме)
<сильный>3. Теперь пришло время вызвать метод, 2 варианта: вызвать метод из контроллера или вызвать метод в обратном вызове after_create
Я рекомендую делать это в after_create
, это немного чище. Итак, в вашей модели используйте тот же код, что и выше, но добавьте эту строку в объявление устройства:
after_create :set_default_tempaltes
Если вы предпочитаете делать это в контроллере, вы можете, но помните, что с devise это должно быть сделано внутри контроллера регистрации, поэтому, когда новый пользователь регистрируется, это происходит в методе create:
def create
super
if resource.save
resource.set_default_templates
end
end
ПРИМЕЧАНИЕ Имейте в виду, что пока вы полностью не поймете, что делают эти методы devise, я не рекомендую переопределять их и думаю, что вам будет безопаснее использовать обратный вызов after_create< /эм>
<сильный>4. Теперь создайте отложенное задание
rails generate delayed_job:active_record
<сильный>5. Запустите фоновый процесс из командной строки
bin/delayed_job start
Кроме того, если вы используете единорога и мастера для своего сервера приложений, вам нужно будет предпринять другие шаги, но они изложены в учебниках и здесь, в StackOverflow, поэтому просто найдите или создайте новый вопрос, если вы застряли
person
trh
schedule
26.09.2015