1.Caching with Instance VariablesUser.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 Associationhtm에서
@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 ModelTask 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거의 애자일 레일즈에서 본내용인데 그냥 정리하는 차원에서 정리 좀 해야겠다.
나머지는 낼.