0
私は通常のブラウザーベースのRailsゲームアプリケーションを開発しました。私はCloudMailinをこのミックスに追加しています。これは、電子メールで代替インターフェイスを効果的に公開しています。別のコントローラー(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
私は今Cloudmailinの電子メールを処理するために私PbemControllerを持っている:
class PbemController < ApplicationController
# Handle inbound email
def handle
if email_is_a_game_creation
...
end
render :text => "Handled"
end
end
既存を呼び出すためのどのような最善とDRYest方法create
の動作はPbemController
からですか?私の唯一の現実的な選択肢は、それぞれのコントローラでそれぞれの "共用"アクションをモジュールに含めることです(/lib' and
)。
私はおそらく、私のコントローラーに少し余裕があると思います。私はそれができるかどうかを見ます。 – Chowlett
実際、ゲームのロジックの大部分は、ゲームのモデルにあります。コントローラa)はゲームに何を尋ねるかを決定する。 b)無効なパラメータを報告するゲームを処理する。 c)セッションユーザのために新たなプレイヤーと新しいゲームをリンクすることを処理する。 d)フラッシュを設定する。 e)レンダリングまたはリダイレクト。それはモデルの中にあるはずのもののように感じません。 – Chowlett
私には、モデルの中に項目を置くべきではないなら、コントローラからのメールハンドラ内で複製するのではなく、この場所にそのメールハンドラに固有のコードを追加するのでしょうか? –