我有很多的重複代碼的控制器,如:軌道 - 乾涸的控制器操作
class PostController < ApplicationController
def action1
end
...
def actionN
end
end
,基本上每個動作做這樣的事情:
def action
@post = Post.find(params[:id])
if @post.action(current_user)
flash[:notice] = "#{custom string for this action}"
else
flash[:notice] = "Problem with your request"
end
redirect_to root_url
end
我想過ApplicationController中的一個方法,它接受一組符號並生成其他方法,例如:
def self.action_for(*args)
args.each do |method, string|
define_method method.to_sym do
@post = Post.find(params[:id])
if @post.send method.to_sym
flash[:notice] = string
else
flash[:notice] = "Problem with your request"
end
redirect_to root_url
end
end
end
並調用PostController中:
action_for [:action1, "Congratulations!"], [:action2, "Cool action!"] ..
我認爲這個解決方案是醜陋的,它使ApplicationController的髒,並允許其他控制器打電話給我的行動。
任何想法來解決代碼重複問題?
謝謝dgutov,我想我會用你的解決方案。 – Andrea 2012-07-08 14:53:18