我开发了一个普通的基于浏览器的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
我现在有了用于处理Cloudmailin电子邮件的PbemController:
class PbemController < ApplicationController
# Handle inbound email
def handle
if email_is_a_game_creation
...
end
render :text => "Handled"
end
end
从create
调用现有PbemController
行为的最佳和DRYest方法是什么?我唯一真正的选择是将每个“共享”操作提取到/lib' and
中的模块,包括每个控制器中的模块吗?
答案 0 :(得分:1)
通常,最好的选择是尽可能多地移动到模型中。这样,任何可以从控制器执行的代码也可以从处理程序执行。
您可以制作一个像create_or_build_random
这样可能对此有帮助的方法吗?