Вызвать "обычный" контроллер через другой контроллер (CloudMailin)
Я разработал обычное браузерное игровое приложение Rails. Сейчас я добавляю CloudMailin к миксу, эффективно выставляя альтернативный интерфейс по электронной почте.
Рассмотрим в качестве репрезентативного примера мои существующие create
действие:
class GamesController < ApplicationController
def create
@game = Game.params[:new]
if @game.random_create
# Asked to create a game using random choices.
# Make the random choices, then present it to the user for tweaking
@game.expand_random_choices
render :action => new
else
# Fully specified. Create the game
begin
@game.save!
# ...other work including DB operations ...
flash[:notice] += 'Game was successfully created.'
redirect_to :action => :play, :id => @game
rescue ActiveRecord::RecordInvalid
@game.valid?
render :action => 'new'
end
end
end
end
Теперь у меня есть мой PbemController для обработки электронной почты Cloudmailin:
class PbemController < ApplicationController
# Handle inbound email
def handle
if email_is_a_game_creation
...
end
render :text => "Handled"
end
end
Какой самый лучший и самый сухой способ призвать существующие create
поведение от PbemController
? Является ли мой единственный реальный вариант извлечения каждого "общего" действия в модуль в /lib' and
включить что в каждом контроллере?
1 ответ
Обычно лучшим вариантом является перемещение в модель как можно больше. Таким образом, любой код, который может быть выполнен из контроллера, также может быть выполнен из обработчика.
Вы можете быть в состоянии сделать метод, как create_or_build_random
что может потенциально помочь здесь?