我正在寻找一种可扩展的方法将功能注入控制器。
module Social
module Request
def self.included( base )
base.alias_method_chain :render, :social
base.alias_method_chain :process_action, :social
end
def process_action_with_social(method_name, *args)
@action = method_name
process_action_without_social(method_name, *args)
end
def render_with_social(action = nil, options = {}, &blk)
if @action == "new"
# do something social
end
render_without_social
end
end
end
class RequestController < ApplicationController
include Social::Request
def new
@request = RecommendationRequest.new
end
end
上面的代码正在运行,但我很确定它不是最佳的ruby。我将为每个控制器创建不同的模块,实际上可能是其中的一部分。每个控制器唯一唯一的代码是render_with_social。
所以我的问题是:
谢谢大家。