有没有更简洁的方法来编写这个简单的ruby条件和循环?

时间:2013-02-06 06:10:14

标签: ruby-on-rails ruby

下面的代码可以更整洁,更简洁地编写吗?

<% if Post.all.count > 0 %>                                                                                                                                                                              
  <% for post in Post.all do %>
    Display my post
  <% end %>
<% else %>
  <p>No one has posted anything yet.</p>
<% end %>

3 个答案:

答案 0 :(得分:3)

我使用#exists我觉得比计算更快,并使用#each代替for循环。我使用下面的#find_each,以便按批次1000提取。

<% if Post.exists? %>
  <% Post.find_each do |post| %>
    Display my post
  <% end %>
<% else %>
  <p>No one has posted anything yet.</p>
<% end %>

答案 1 :(得分:3)

在后置控制器中

  

@posts = Post.find(:all)

在视图页面

  

<% @posts.each do |post|%> Display post <% end %>

<p><%= "No one has posted anything yet." if @posts.present?  %></p>

请尝试这个..

答案 2 :(得分:0)

使用for loop的枚举器iterator并在使用前加载帖子(在控制器的操作内)的更好方法:

# PostsController#index
@posts = Post.all  
# instead of Post.all you be able to use different options like:
# filtering, pagination and ordering
@posts = Post.where(:published => true).order("created_at DESC")

# index.html.erb
<% if @posts.present? %>                                                                                                                                                                              
  <% @posts.each do |post| %>
    Display my post
  <% end %>
<% else %>
  <p>No one has posted anything yet.</p>
<% end %>