Вызвать «обычный» контроллер через другой контроллер (CloudMailin) - PullRequest
0 голосов
/ 10 августа 2011

Я разработал обычное браузерное игровое приложение 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 Ответ

1 голос
/ 10 августа 2011

Обычно лучшим вариантом является перемещение в модель как можно больше.Таким образом, любой код, который может быть выполнен из контроллера, также может быть выполнен из обработчика.

Возможно, вы сможете создать метод, подобный create_or_build_random, который потенциально мог бы помочь здесь?

...