将它写入您的ApplicationController
并将其定义为helper_method。
例如
class ApplicationController < ActionController::Base
helper_method :current_time
def current_time
Time.now
end
end
现在你可以在任何地方控制器或意见CAL current_time
。
此外,您可以编写单独的模块/类并定义您的帮助器方法。比起主题更改
后,你应该包括这个文件到您的ApplicationController
以及
UPD我没有想到你的实际问题。但我可以说,你的方法在这里点头最好。
您应该创建新的资源而不是创建难以测试的新功能。因此,创建新的资源(控制器):版本和玩这个控制器。
例如它如何工作的:
/versions/pages/132
/versions/comments/1003
如何实现它:
match "/versions/:model/:id", :to => "versions#index"
在你的控制器:
class VersionsController < ActionController::Base
def index
@object = my_type.find(params[:id])
@versions = @object.versions
end
private
def my_type
params[:model].constantize
end
end
当然你也可以改变路线的方式,你想要:
match "/:model/:id/versions", :to => "versions#show"
所以现在你的漂亮/pages/testpage/versions
将适合你,没有任何新的奇怪的逻辑。
UPD 2
试想一下,你有这条路线:
match "/:model/:id/versions", :to => "versions#index", :as => :versions
而这个对象:
@page = Page.last
@hotel = Hotel.find(123)
@comment = @page.comments.first
我们如何将创建版本链接:
<%= link_to "Versions of this page", versions_path(:model => @page.class.to_s, :id => @page.id) %>
<%= link_to "Versions of this hotel", versions_path(:model => @hotel.class.to_s, :id => @hotel.id) %>
<%= link_to "Versions of this comment", versions_path(:model => @comment.class.to_s, :id => @comment.id) %>
也许我只是不明白,但这似乎并没有解决我的问题。我稍微改变了这个问题,希望现在更清楚。 – 2011-04-20 13:53:41
是的。现在这是另一个问题:) – fl00r 2011-04-20 13:54:28
对不起。完成描述后,我忘了回顾这个问题。 – 2011-04-20 13:55:24