Ruby on Rails布局从Model中读取数据

Mar*_* S. 10 ruby-on-rails ruby-on-rails-3

我正在开发一个RoR应用程序,我正在编写博客组件.我打算有一个布局文件,它将显示博客组件中每个页面上数据库中的所有标签.我知道如何创建和使用除application.html.erb之外的其他布局文件,但我不知道如何从数据库中读取各种控制器中每个操作的标签列表.我不想在每个动作中创建适当的实例变量.什么是适当的方法来解决这个问题?

Chr*_*ald 16

使用before_filterapplication_controller创建实例变量:

before_filter :populate_tags

protected

def populate_tags
  @sidebar_tags = Tag.all
end
Run Code Online (Sandbox Code Playgroud)


Pan*_*kos 9

我建议使用before_filter,但也要在memcached中缓存你的结果.如果您要在每个请求上执行此操作,最好执行以下操作:

class ApplicationController
  before_filter :fetch_tags

  protected

  def fetch_tags
    @tags = Rails.cache.fetch('tags', :expires_in => 10.minutes) do
      Tag.all
    end
  end
end
Run Code Online (Sandbox Code Playgroud)

这将确保您的标记缓存一段时间(例如10分钟),这样您只需每10分钟进行一次此查询,而不是每次请求.

然后,您可以在侧边栏中显示标记,例如,如果您的布局中显示了_sidebar partial,则可以执行以下操作.

#_sidebar.html.erb
render @tags
Run Code Online (Sandbox Code Playgroud)