2013-08-19 3 views
0

필자는 레일즈 블로그 앱에서이 코드를 내보기에 가지고있다. 가능하다면 누군가를 도우미로 만들 수있는 방법에 대해 정말로 추악하게 보입니다.레일즈 뷰 헬퍼 생성하기

<h4>Archive</h4> 
<%# This is really awful. I know. %> 
<% @posts = BlogNgin::Post.order('created_at DESC') %> 
<% archive_array = [] %> 
<% @posts.each do |post| %> 
<% date = post.created_at.strftime("%m") + " " + post.created_at.strftime("%Y") %> 
<% if !archive_array.include? date %> 
<% archive_array << date %> 
<% end %> 
<% end %> 
<% 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 %> 

답변

0

나는 이것보다 훨씬 더 나은하거나 몇 가지 그 일을하는 가장 좋은 방법은, 그러나 여기에 만약 당신이 할 수있는 사람이 할 수 있습니다 확신 해요. 중간 부분을 도우미 메서드로 추출 할 수 있습니다.

이제보기가 이렇게 보입니다.

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

당신은 BlogNgin::Post.desc

또한 이동할 수 =이 줄 <% @posts = BlogNgin::Post.order('created_at DESC') %>을 제거하고 @posts 같은 것을 할 수있는 범위로 변경할 수있는 경우 @posts = BlogNgin::Post.order('created_at 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)) %> 
이 (희망) 볼 것