我有一个用户控制器,它由一个名为listfolders()的方法组成。
class UserController < ApplicationController
def myaccount()
userId = session[:id]
@listfolders = UsersFolders.listfolders(userId)
@users = User.listusers()
end
end
在我拥有的视图中,我可以获取文件夹:
<% @listfolders.each do |userfolder| %>
<tr>
<td><a href="#" target="cstr"><b><%= userfolder.foldername %></b></a></td>
</tr>
<% end %>
问题:我想在所有页面中显示文件夹,如撰写,drafs,垃圾等...而不仅仅是为了操作。
我该怎么做?
答案 0 :(得分:3)
执行此操作的基本标准方法是帮助。
module ApplicationHelper
def listfolders(user_id)
lf = UsersFolders.listfolders(user_id)
render 'users_folders/listfolders', :listfolders => lf
end
end
然后在app / views / users_folders / _listfolders.html.erb
中<% listfolders.each do |userfolder| %>
<tr>
<td><a href="#" target="cstr"><b><%= userfolder.foldername %></b></a></td>
</tr>
<% end %>
调用它就像:
<% listfolders(session[:id]) %>
答案 1 :(得分:0)
如果我理解一切正确,您需要在控制器中使用:before_filter
来初始化@listfolders
和@users
变量
答案 2 :(得分:0)
您可以轻松移动代码以将文件夹+部分模板加载到单元组件,然后从任何视图调用该单元格。
检查一下: http://cells.rubyforge.org/
它将像render :partial
调用一样工作,但会添加一个控制器,如应该加载用户文件夹的进程,然后创建要渲染的部分。
应该工作的另一种方法是在application_controller上有一个方法来加载文件夹。然后添加一个before_filter,将该方法调用到应该呈现文件夹的每个操作。 最后,您可以创建一个共享部分,以在每个应该显示该视图的视图上呈现。
注意:如果您只显示来自子控制器的同一控制器的操作的文件夹,则可以在更具体的控制器中定义加载文件夹的方法。