誰かがこれよりもはるかに優れたものを作ることができると確信していますが、それが最善の方法である場合は、ここにあなたができることがいくつかあります. 中間部分をヘルパー メソッドに抽出できます。
def archive(posts)
<% posts.each do |post| %>
<% archive_array = [] %>
<% date = post.created_at.strftime("%m") + " " + post.created_at.strftime("%Y") %>
<% if !archive_array.include? date %>
<% archive_array << date %>
<% end %>
<% end %>
end
したがって、ビューは次のようになります。
<h4>Archive</h4>
<%# It's probably still awful %>
<% @posts = BlogNgin::Post.order('created_at DESC') %>
<% archive_array = archive(@posts) %>
<% archive_array.each do |date| %>
<% date = date.split(' ') %>
<%= link_to Date::MONTHNAMES[date[0].to_i].to_s + " " + date[1], blog_ngin.root_path + date[1] + '/' + date[0] %><br />
<% end %>
この行<% @posts = BlogNgin::Post.order('created_at DESC') %>
を削除して、コントローラーアクションで@posts = BlogNgin::Post.order('created_at DESC')
これを @posts = のようなことを行うスコープに変更できるかどうかわからないとして設定できます。BlogNgin::Post.desc
次のように、最後の部分を別のヘルパー メソッドにシフトすることもできます。ヘルパー ファイルで link_to メソッドを直接使用できるかどうかはよくわかりませんが、うまくいくと思います。
def links(archive_array)
MONTHNAMEs = #put your array here
<% archive_array.each do |date| %>
<% date = date.split(' ') %>
<%= link_to Date::MONTHNAMES[date[0].to_i].to_s + " " + date[1], blog_ngin.root_path + date[1] + '/' + date[0] %>
<% end %>
end
したがって、ビューは次のようになります (うまくいけば)
<h4>Archive</h4>
<%# It's probably still awful %>
<%= links(archive(@posts)) %>