-1

次のコードをもっときちんと簡潔に書くことはできますか?

<% 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 %>
4

3 に答える 3

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 %>
于 2013-02-06T06:15:17.593 に答える
3

ポストコントローラーで

@posts = Post.find(:all)

閲覧ページでは

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

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

これを試してみてください..

于 2013-02-06T06:42:43.553 に答える
0

列挙子イテレータを使用し、使用for loop前に投稿をロードする(コントローラーのアクション内)ためのより良い方法:

# 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 %>
于 2013-02-06T06:17:00.660 に答える