문제

Map을 사용하여 레일에 편안한 경로를 만들 때 왜 신규, 작성, 편집, 업데이트? 하나의 행동 만 선언 할 때 잘못된 것이 있습니까? 만들다 그리고 업데이트그리고 이런 일을 하시나요?

def create
  unless post?
     @user = User.new
  else
     redirect_to :action => 'index' if user.create(params[:user])
  end
end

그래서 우리는 같은 것을 가질 수 있습니다

:GET  users/create # to show the form (same as action - new)
:POST users/create # to create a new user

Restful은 동사를 기반으로하기 때문에 이것이 최선의 사용 접근법이 아닐까요?

관심을 가져 주셔서 감사합니다

도움이 되었습니까?

해결책

여기에는 두 가지 관련이 있지만 뚜렷한 문제가 있다고 생각합니다. 노출 된 URL과 컨트롤러 방법이 라우팅됩니다. 이 중 하나를 독립적으로 변경할 수 있으므로 별도로 해결하겠습니다. 또한, 나는 레일의 맥락에서 구현 된대로 휴식에 대해 약간 느슨하게 말할 것입니다.

외부 URL과 관련하여 시스템의 API를 구성하는 URL을 구별하는 데 도움이된다고 생각합니다.:GET users/1, :PUT users/1, 등) 및 웹 브라우저를 사용하는 인간에게 편리한 URL (users/new, users/5/edit, 등). API는 자원을 가져 오거나 어떤 식 으로든 상호 작용하는 것입니다. 시스템과 상호 작용할 때 다른 컴퓨터가 사용할 URL입니다. 이 URL은 일반적으로 상호 작용하려는 리소스의 주소 일뿐입니다. 그런 다음 HTTP 메소드와 매개 변수를 사용하여 원하는 일을 표시합니다 (get =이 리소스 표시, Put =이 리소스 변경 등을 표시하십시오. ). 편의 URL은 사람이 API를 쉽게 사용할 수 있도록 양식을 표시 할 수 있습니다. 너 ~할 수 있었다 CURL을 사용하여 변경하려는 모든 매개 변수를 수동으로 입력하여 사용자/1에 게시물을 작성하여 사용자를 편집하십시오. 그러나 인간으로서 양식 만 사용할 수 있다면 훨씬 쉽습니다.

위의 예를 살펴 보려면 :GET users/create 의미가있을 수 있습니다 (그리고 매우 비슷합니다 :GET users/new 기본값이지만 :POST users/create 대략 "새로운 사용자/생성"으로 번역되며, 이는 의미가 없습니다.

컨트롤러 방법이 진행되는 한, "신규"및 "Create"는 이전 단락에서 명확하게 설명 해야하는 것처럼 근본적으로 다른 작업을 수행하고 있습니다. 그중 하나는 양식을 표시하고 다른 하나는 새로운 리소스를 만들고 있습니다. 너 ~할 수 있었다 물론 동일한 방법을 과부하시키지 만, 그렇게해야 할 강력한 이유가 없으면 두 개의 작은 독립적 인 작업을 처리하기위한 두 가지 작은 독립 방법을 만들어내는 것이 더 자연스러운 접근 일 것입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top