, 나는 종종sinatra/padrino 앱/컨트롤러에서 엔티티 페치를 마르는 방법 (실패)? 시나 또는 대부가 애플 리케이션을 구축
get '/resource/:id' do
resource = Resource.find(params[:id])
return status 404 if resource.nil?
# ..
end
과 같은 코드를 작성하거나 실제로, 나는이 "능숙"을 통해 모델링 레일 생각
flash[:warning] = "A Resource with id #{params[:id]} coud not be found".
redirect back
을 좋아합니다. 내 컨트롤러가 섞여있는 경향이 있습니다. 경로의 일부는 리소스 ID (어떤 db에서 가져 오겠습니까)에 의존하며, 다른 리소스는 그렇지 않습니다.
이 패턴을 말리는 데 사용할 수있는 패턴은 무엇입니까? 나는 before
핸들러 알고 (의사 코드,하지만 정말 스마트 구현을 보지 못했다! - 어딘가에 반드시 거기 밖으로)
before "*" do
@resource = Resource.get(params[:id])
redirect_with_flash if @resource.nil?
end
또는 각 경로에서 먼저 전화를하는 방법에 유사한 코드를 넣어 요구 사항.
그래도 거의 모든 Sinatra 튜토리얼에서 유사한 코드 조각이 보입니다. 더 좋은 옵션이 아닌가요? 나는 그것을 간과한다면 특히 padrino 접근에 관심이있다. 여기
는 요청/오류가 사용할 수있는 발생했습니다 Sinatras halt
무효 알고있는 코드 내가 바로 당신이 요청을 처리 중지하려면
MyPadrinoApp::App.controllers :user do
associated_resource = User
associated_resource_error_flashs = { "404": "A User with %s could not be found" }
get :show, :with => :id, :resource_bound => :user do
render '/user/show' # in which @user is available
end
end
감사합니다. 이는 유효하고 편리한 접근법처럼 보이며 의미 상으로는 올바른 것을 사용하지 못하게합니다. 나는 더 이상의 대답을 기다릴 것이고, 더 이상 올 수없는 유일한 패턴으로 당신을 받아 들일 것입니다. – Felix
좋았어, 나는 다른 방법에도 관심이있다. halt 사용에 대한보다 자세한 예제는 http://myronmars.to/n/dev-blog/2012/01/why-sinatras-halt-is-awesome에서 찾을 수 있습니다. – maddin2code