ruby on rails全局方法

时间:2011-05-20 12:34:02

标签: ruby-on-rails

我有一个用户控制器,它由一个名为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,垃圾等...而不仅仅是为了操作。

我该怎么做?

3 个答案:

答案 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,将该方法调用到应该呈现文件夹的每个操作。 最后,您可以创建一个共享部分,以在每个应该显示该视图的视图上呈现。

注意:如果您只显示来自子控制器的同一控制器的操作的文件夹,则可以在更具体的控制器中定义加载文件夹的方法。