2010-12-17 2 views

답변

1

create 메서드는 해당 간단한 블로그 게시물을 만드는 책임을지고 update 메서드는 해당 메서드를 업데이트해야합니다.

def create 
    @blog = Blog.new(params[:blog]) 
    if @blog.save 
    flash[:notice] = "Saved!" 
    redirect_to @blog 
    end 
end 

def update 
    @blog = Blog.find(params[:id]) 
    if @blog.update_attributes(params[:blog]) 
    flash[:notice] = "Saved!" 
    redirect_to @blog 
    end 
end 

저장이 성공/실패 할 때 수행 할 작업 외에도 많은 것을 추출 할 수 있습니다.

+0

저장 또는 저장을해야하나요! – Blankman

+0

또한 업데이트 방법이 실패하면 어떻게해야 "new"가 렌더링됩니까? – Blankman

+0

@Blankman :'create' 메소드에서'save'를 사용하십시오. 연산이 실패하면 두 액션의'save'와'update_attributes'는 모두 false를 반환합니다; 이렇게하면 사용자가 다른 작업으로 리디렉션하지 않고 양식의 실수를 바로 잡을 수 있습니다. 이것은 if 문에 else 부분이 없기 때문입니다. – vonconrad

0

createupdate은 비슷하지만 문자 그대로 동일하게 만드는 것이 가치 있다고 생각하지 않습니다. 일반적으로 서로 다른 플래시 메시지를 원할 것입니다. 또한 유효성 검사가 실패하면 create에서 new 작업을 렌더링하는 것이 가장 좋습니다. 반면에 실패한 update에서는 edit 작업을 렌더링 할 가능성이 큽니다. 이러한 작은 차이점은 일반적으로 충분하기 때문에 별도의 작성 및 새 메소드를 갖는 것이 더 간단하고 읽기 쉽습니다.

개인적으로 createupdate 각각에 대해 else 절이 있습니다. 사용자는 여전히 오류를 확인하고 그것을 수정하지만,이 방법은 내가 전혀 createupdate 뷰를 필요가 없습니다 수

#create 
else 
    render :action => "new" 
end 

#update 
else 
    render :action => "edit" 
end 

:처럼 그들은 보일 것이다.

save! 또는 update_attributes!을 사용하는 경우 유효성 검사 오류가 발생하면 예외가 발생하므로 어딘가에서 구해야합니다. 구조대를 구하지 않았다면 모델을 검증하지 못할 때마다 사용자에게 500 오류 페이지가 표시됩니다. 그래서 비 전통적으로 사용하는 것이 더 일반적입니다! saveupdate_attributes 방법.

관련 문제