2009-07-10 33 views
0

在我的Rails应用程序中,我在多个页面上渲染了一个部分,并且在这个部分中是一个变量。所以目前,假设我有5个页面呈现:partial =>“partialname”,而partialname里面是@variable。如何创建一个具有自己行为的“部分”?

我可以拥有它,以使partialname在@variable里面实例化时有自己的动作,而不是从每个渲染该部分的动作调用5次@variable?

谢谢!

回答

0

你可以从视图中加载@variable:

 
<% @variable = Variable.find(:whatever) %> 

,但有些人认为在没有坚持严格的MVC这个坏习惯。这确实有支持片段缓存开箱的好处:

 
<% cache({:variable_id => :whatever}) do %> 
<% @variable = Variable.find(:whatever) %> 
. . . 
<% end %> 

是否有在这你可以委托变量访问的主要观点被渲染的通用模型?

 
<%=h @model.variable %> 
+0

实际上,这可能是解决方案! – Jess 2009-07-10 20:08:26

0

所以,这是一个代码每个请求运行5次的问题,你宁愿不要?就像,你已经有了一个局部的,它是:

@my_var = MyModel.some_expensive_method 

如果是这样,你可以只缓存结果模型:

def cached_some_expensive_method 
    @some_expensive_method ||= some_expensive_method() 
end 
2

我会在所有的方法创建一个before_filter那需要共同的行为。

但是,如果您确实希望部分具有自己的“动作”,请制作一个辅助方法,执行所需的任何“动作-y”事情,然后呈现该部分。这基本上是相同的事情。我之前完成了这个工作,制作了一个模板类型的部分,其中包含需要处理的各种数据。

1

Rails Sub-controllers?

见我对这个答案。

这里非常类似的方法,在使用过滤器之前使用控制器继承或需要时使用模块。

相关问题