26장.Hackers Love Mass Assignment

원하지 않는 컬럼을 임의로 등록하려고 할때
attr_protected 을 이용하여 막는 방법.
하지만 접근이 불가능한 컬럼을 적기가 많거나 귀찬다고 한다면 attr_accessible을 이용하면됨.
 attr_accessible은 적은것만 빼고 모든것이 등록이 불가함.

27장.Cross Site Scripting

cross site scripting에 대한 방지법.
이스케이프하는 방법이 나옴.
이스케이프는 h(sometihg) 이렇게 사용하면됨.
레일즈 에자일웹개발에서도 무조건 문장에 이스케이프를 하는 방법을
습관들이라고 나옵니다.

28장.in_groups_of

in_groups_of를 이용하여 행을 나누는 방법.
in_groups_of는 배열을 그룹을 짓는 핼퍼매소드
in_groups_of(4)하면  4개씩그룹을 짓는다.하지만 갯수가 모자르면 nil을 들어감.
하지만 in_groups_of(4,false)을 하면 nil이 아니라 아무것도 안들어감.
in_groups_of(4,defaultvalue)을 하면 그룹을 짓다가 부족한경우 defaultvalue가 들어감.

Posted by 전용우

댓글을 달아 주세요

22장.Eager Loading

이번장은 perloading에 대해서 나온다.
예를들면 post 1---* comment란 관계가 있는데.(굳이 1--*관계가 아니라도 상관없음.)
post = Post.find(:all)

for post in @post
    post.name
    post.comment.name
do

이렇식으로 하면 post.comment.name 이부분이 for문을 돌면서 매번 패칭을 한다.
그래서 이방법을 해소하기 위해 :include을 사용하면 미리 해당 건을 가져 오기 때문에
한번의 패칭으로 같은 효과를 낼수 있다.

post = Post.find(:all)  -> post = Post.find(:all,:include=>:comments) 로 바꿔주면 됨.

하지만 이방법은 left outer조인이 지원을 해야한다.즉,오라클 8i는 안됨.


23장.Counter Cache Column

이번장은 counter cache기법이다.
has_many 관계에서 이글에 딸린 커멘트수 같은걸 구할때 매번 조인을해서 구하는것이
아니라 캐싱하는기법.

자식 액티브래코더에 belongs_to :부모이름_cache => ture을 정하고
부모테이블에 자식이름_count 컬럼을 만들어 자동으로 캐싱됨.

24장.The Stack Trace

stack trace로 디버깅하는방법.
좋긴한데... textmate가 있어야한다.아쉽..RDT로는 안되나?..한번 확인해봐야겠다

25장.SQL Injection

다른 언어와 같이 파라메터를 바인딩하는것으로 sql injection을 막는방법.
일반 언어와 같음.
Posted by 전용우

댓글을 달아 주세요

19장~21장은 관리자 개발시 보통일반하면과 따로 개발하는데 이것을 좀더 쉽게 개발하는
방식에 대해 설명함.(현재 진행중)

19.Where Administration Goes

첫번째로는 관리자 화면과 일반화면을 합치는 방법.


20.Restricting Access

필터링을 이용한 권한제어하기(필터링과 유저 핼퍼매소드가 핵심)

21.Super Simple Authentication

간단한 로그인을 통한 권한관리(한번 플러그인 깔아보고 해볼것)
Posted by 전용우

댓글을 달아 주세요

13장.Dangers of Model in Session

session에 모델을 넣으면 데이터베이스와 일치하지 않는경우가 발생됨.
그래서 id만을 저장하고 그이후에 fetch하는것이 올바른 방법.


14장.Performing Calculations on Models

associations에서 계산방법을 향상시키는 방법.


15장.Fun with Find Conditions

find_by 매소드를 이용하여 좀더 편하게 검색하기


16장.Virtual Attributes


이름과 같은 경우 성과 이름이 따로 떨어져 있는데
이름이란 가상속성을 만들어서 사용하는방법.


17장.HABTM Checkboxes

habtm에서 check box를 만드는방법.


18장.Looping Through Flash


flash는 보통 오류메세지를 보낼때 사용되는데
여러개의flash메세지가 보여질경우 loop을 이용하는 방법.
Posted by 전용우

댓글을 달아 주세요

10~12장은 Refactoring 하는 방법을 다룸.

10장.Refactoring User Name Part 1

이름을 리팩토링하는 기법.
자주 사용할만것 내용.
핼퍼 매소드와 정의매소드를 잘사용해야될것 같음.

11장.Refactoring User Name Part 2

TDD를 통한 리팩토링 기법.
좀더 루비스러운(?)코드로 바뀌는 과정.

12장.Refactoring User Name Part 3

testcase를 다시 리팩토링 하는 방법.
Posted by 전용우

댓글을 달아 주세요

7장.All About Layouts

layout 사용법
views/layout폴더에 application.rhtml을만들고
레이아웃을만들고 컨텐츠가 들어갈곳에 <%= yield %>로 하면 전체 레이아웃이 잡힘.
각 컨트롤러마다 레이아웃을 잡고 싶을경우
프로젝트명.rhtml로 만들면 자동으로 프로젝트명이 잡힘.
아니면 컨트롤러에서 layout "프로젝트명"으로 표시하면 해당 레이아웃이 적용.

그래서 사용자 마다 같은 페이지라도 레이아웃을 다르게 표현하고 싶을때가 있는데
그럴땐 심벌을 사용하여 적용.

render명령으로도 layout을 적용가능.

8장.Layouts and content_for

보통 application에서 해당 컨트롤러 레이아웃을 가져오는 방법을 사용하는데
특정 컨트롤러에서 application의 레이아웃을 바꾸고 싶을때가 있다. 그럴때
content_for의 핼퍼매소드를 이용하며됨.

9장.Filtering Sensitive Logs

비밀번호같은 중요한정보를 로그에 노출되지 않도록 filltering하는방법.
application 컨트롤러에
filter_parameter_logging "이름" 주면 logging에서 필터링되서 나옴.
(application에 적용하면 모두 적용됨)

Posted by 전용우

댓글을 달아 주세요


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 전용우

댓글을 달아 주세요

요즘시간이 생기면서 무엇을 할까 하다가..
그동안의 숙원이었던 루비를 공부하고 있는데...
:<- 심볼의 의미를 잘 몰랐다..상수 같다라는 의미같았는데...
어떨때 쓰는지도 모르겠고..ㅡㅡ;

근데 다행히 어떤분이 이것에 대해 번역하신 글이 있어서 이해하는데 큰도움이 됬다.

ps.원문은 링트가 깨져서 도저히 못찾았습니다.그래서 구글신의 도움으로 캐쉬된링크를 걸었으니 이해 바랍니다.

Posted by 전용우
TAG ruby

댓글을 달아 주세요