0

我有一个控制器方法:

def latest_blogs
  @latest_blogs = BlogEntry.all.order('dato DESC').limit(4)
end

作为我的主页的根 html.erb 文件:

<div class="body-box">
  <div class="body-content">
    <%= render :partial => 'blog_list' %>
  </div>
</div>

blog_list 部分:

<div class="blog-list">
  <%= latest_blogs.each do |blog| %>
    <%= render :partial => "blog_preview",  locals: {blog: blog} %> 
  <% end %>
</div>

而 blog_preview 部分现在只是一个存根:

<div class="blog-preview">
 <%= blog.title %>
</div>

我的 routes.rb 条目:

resources :blog_entries
root :to => 'home#blog_home', :as => 'root'

我如何告诉我的应用程序何时加载要呈现的根页面latest_blogs?谢谢。

4

3 回答 3

1

您可以声明latest_blogas 辅助方法。请尝试以下方法:

class BlogsController < ApplicationController
  def latest_blogs
    @latest_blogs = BlogEntry.all.order('dato DESC').limit(4)
  end

  helper_method :latest_blogs
end
于 2013-08-08T14:45:37.367 回答
1

latest_blogs 是您实际的控制器操作,还是只是您向视图公开的某种方法?如果它只是您要公开的某种方法,那么您应该将其设为辅助方法。

def latest_blogs
  @latest_blogs ||= BlogEntry.all.order('dato DESC').limit(4)
end
helper_method :latest_blogs

请注意,我在这里将 = 更改为 ||=。我认为在这种情况下会更好,这样如果你碰巧多次调用助手,那么它就不会重复重新评估它。

仅供参考,您还可以稍微清理一下标记代码。您的根 html 文件可以执行以下操作:

<div class="body-box">
  <div class="body-content">
    <div class="blog-list">
      <%= render partial: 'blog_preview', collection: latest_blogs %>
    </div>
  </div>
</div>

然后_blog_preview.html.erb:

<div class="blog-preview">
  <%= blog_preview.title %>
</div>
于 2013-08-08T14:47:24.427 回答
1

我会开始:这个方法不应该在控制器中。将其放入模型中

class BlogEntry < ActiveDirectory::Base
  def self.latest (n = 4)
    all.order('dato desc').limit(n)
  end

然后将其用作:

BlogEntry.latest

请注意,此方法也可用于关系:

user.blog_entries.latest(1)   #=> returns last user blog entry
于 2013-08-08T14:54:32.330 回答