一个新手问题:
我有一部分内容是我在不同页面的网站上加载。
那部分需要一些数据,所以在父视图的控制器中我做了查询: @properties = Property.find(:all)
我使用:locals
将查询结果传递给视图中的partial现在,我想从另一个视图渲染相同的部分。此视图具有不同的控制器。我是否还必须在该控制器中重复查询?或者我可以为部分我有一个单独的控制器我在网站上再使用一个地方。在最后一种情况下,当我放置渲染命令时,如何指示在视图中使用哪个控制器?
或者我应该使用与partials不同的思考来进行这种用途吗?
亲切的问候, 迈克尔
答案 0 :(得分:2)
我如何解决这个问题,就是在lib
文件夹中定义一个具有有意义名称的新文件。现在我将使用does_as_shared.rb
:
module DoesAsShared
def setup_shared_data
@shared_data = ...do something useful here ...
end
end
然后在需要您编写代码的控制器内部:
class ThingsController < ApplicationController
include DoesAsShared
def index
setup_shared_data
.. and do some more stuff ...
end
end
此代码的优点是共享代码仅限于那些真正需要它的控制器。同时它具有很强的可读性:include语句,只要选择好名称,清楚地表明包含了哪些功能。
答案 1 :(得分:1)
您无需复制代码来设置部分数据,但 需要将其提升到两个控制器继承的控制器中。通常,这将是您的ApplicationController
。在那里定义一个加载所需数据的方法。例如:
class ApplicationController < ActionController::Base
# ... your code ...
protected
def load_partial_data
@properties = Property.find(:all)
end
end
现在要实际调用此方法,您有两个选择:
before_filter
添加ApplicationController
,例如before_filter :load_partial_data
before_filter
添加到只是实际需要加载数据的控制器。我希望这会有所帮助。