我有一个控制器方法:
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 partial:
<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
时告诉我的应用?感谢。
答案 0 :(得分:1)
您可以将latest_blog
声明为辅助方法。请尝试以下方法:
class BlogsController < ApplicationController
def latest_blogs
@latest_blogs = BlogEntry.all.order('dato DESC').limit(4)
end
helper_method :latest_blogs
end
答案 1 :(得分:1)
latest_blogs是你的实际控制器动作,还是只是你暴露给视图的一些方法?如果它只是你暴露的某种方法,那么你应该把它作为辅助方法。
def latest_blogs
@latest_blogs ||= BlogEntry.all.order('dato DESC').limit(4)
end
helper_method :latest_blogs
请注意,我在这里将=更改为|| =。我认为在这种情况下更好,所以如果你碰巧多次调用帮助器,那么它将不会重复地重新计算它。
还有,你也可以稍微清理你的标记代码。你的root 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>
答案 2 :(得分: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