我的用例:
应用程序中的大多数用例都需要正常调用方法homepage
。
class Obj
def homepage
@homepage ||= ancestors.detect do |ancestor|
ancestor.is_a?(Homepage)
end.presence || Homepage.default
end
end
Obj
是所有其他模型的父类。
在Obj
内,导航是根据homepage
定义的。
Obj.homepage经常在其他模型/视图中使用。
在我必须使用名为News
此类不应基于Obj.homepage而是在会话上呈现导航。 我更新主页session-hash,除非该类是新闻。
class CmsController < ApplicationController
before_filter :session_based_homepage
def session_based_homepage
unless news_page?
@homepage = homepage_session
end
end
end
我想覆盖news_pages obj-class的模型/控制器中Obj.homepage
的值
将会话设置为覆盖的主页方法。
这样,Obj.homepage
的所有其他调用仍在运行,但基于会话的值。
Afaik这应该可以通过Controller中的setter来实现,但我太笨了。