如何调用控制器方法在根页上填充部分?

时间:2013-08-08 14:42:26

标签: ruby-on-rails routes

我有一个控制器方法:

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时告诉我的应用?感谢。

3 个答案:

答案 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