1.Caching with Instance Variables

User.find(session[:id]) 이렇게 사용하면 매번 쿼리를 날리지만
@current_user ||=  User.find(session[:id]) 이렇게 하므로서 없을때만  DB에 접속.

2.Dynamic find_by Methods

@tasks = Task.find(:all,:conditions => ['complete = ?',false])
이렇게 쓰는것을 아래 처럼 dynimic_find_by methdod를 이용하여 좀더 의미있게 바꿈
@tasks = Task.find_all_by_complete(false)

3.Find Through Association

htm에서
@project = Project.find(param[:id])
@tasks = Task.find(:all,:conditions => ['project_id =? AND complete = ? ',@project.id,false])
이런식으로 사용되는데 아래와 같이 바꿀수 있음
@tasks = @project.tasks.find_all_by_complete(false);

4.Move Find into Model


Task controller에서
@tasks = Task.find_all_by_complete(false,:order => 'created_at DESC)

이렇게 사용하는데 이것을 Task model의 클래스 매소드를 이용하여
def self.find_incomplete
  find_all_by_complete(false, :order => 'created_at DESC')
end

@tasks = Task.find_incomplete 이렇게 수정할수있고

project controller에서도
@tasks = Task.find_all_by_complete(false,:order => 'created_at DESC)
->@tasks = Task.find_incomplete
이렇게하면 좀더 의미있는 매소드로 만들수 있고 재사용하기 편함.

5.Using with scope(유용)

커스텀된 find메소드에 with_scope을 이용하여 파마메터를 전달하는 방법.

6.Shortcut Blocks with Symbol to_proc

블록사용을 좀더 쉽게하는 방법
find(:all).collect{|p| p.name}
이렇게 사용하는데
find(:all).collect(&:name)이렇게 사용하는거랑 같은 표현.

참고사이트:Railscasts

거의 애자일 레일즈에서 본내용인데 그냥 정리하는 차원에서 정리 좀 해야겠다.
나머지는 낼.

Posted by 전용우

댓글을 달아 주세요