如何创建具有自己动作的“部分”?

时间:2009-07-10 19:49:25

标签: ruby-on-rails ruby

在我的rails应用程序中,我在多个页面上呈现部分,并且该部分是一个变量。所以目前,假设我有5个页面呈现:partial => “partialname”,部分名称内部是@variable。

我是否可以拥有它以使partialname在@variable实例化内部有自己的动作,而不是从呈现部分的每个动作中调用@variable 5次?

谢谢!

4 个答案:

答案 0 :(得分:2)

我会在需要共同行为的所有方法上创建before_filter

但是如果你真的希望partial有自己的“动作”,那就制作一个帮助方法来做你想要的任何“动作-y”事情,然后渲染部分。这基本上是相同的。之前我已经做过这个,以制作一个包含需要处理的各种数据的模板类型部分。

答案 1 :(得分:1)

Rails Sub-controllers?

请参阅我的答案。

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

答案 2 :(得分:0)

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

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

但有些人认为这种不良做法不遵守严格的MVC。这确实有利于支持片段缓存开箱即用:

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

是否有一个在主视图中呈现的通用模型可以委托变量访问?

<%=h @model.variable %>

答案 3 :(得分:0)

那么,这是否是每个请求运行5次代码的问题,你不是吗?就像,你有一个部分,其中是:

@my_var = MyModel.some_expensive_method

如果是这样,您可以将结果缓存在模型中:

def cached_some_expensive_method
  @some_expensive_method ||= some_expensive_method()
end