저는 Head First Rails를 통해 작업 중이며 조금 혼란스러워하는 코드를 발견했습니다. 이 코드의 목적은 새 레코드를 만들 때 오류가 있었는지 확인하고 확인하는 것입니다. 오류가 있으면 목표는 페이지를 다시 표시하는 것입니다. 오류가 없으면 목표는 레코드를 데이터베이스에 저장하는 것입니다.레일즈 컨트롤러 Object.save
def create
@ad = Ad.new(params[:ad])
if @ad.save
redirect_to "/ads/#{@ad.id}"
else
render :template => "ads/new"
end
end
나를 혼란이 코드에 대한 유일한 것은이 사실을 라인을 (@ ad.save 경우) : 여기 책이 제공하는 컨트롤러 코드입니다. 자,이 줄은 오류가 있는지 테스트하기위한 것입니다. 있을 경우 거짓을 반환하고 그렇지 않으면 true를 반환합니다. 그러나 오류가 없으면 (사실을 반환하는) 레코드가 실제로 저장됩니다. Ruby의 "if"구문이 조건을 테스트 한 것으로 생각했지만,이 경우 조건은 테스트되고 실행되었습니다. 이상한 점은 다른 @ ad.save를 추가하면 데이터베이스가 레코드를 두 번 저장하지 않는다는 것입니다. 좋아요 :
def create
@ad = Ad.new(params[:ad])
if @ad.save
@ad.save
redirect_to "/ads/#{@ad.id}"
else
render :template => "ads/new"
end
end
이 코드는 첫 번째 코드 비트와 완전히 똑같습니다. 첫 번째 코드에서 @ad.save가 실행되는 이유는 무엇입니까? 그리고 두 번째 코드 비트가 어떻게 @ ad.save가 두 번 실행되지 않는지 (단 하나의 레코드 만 만들어 짐)?