레일즈 2.3.1 웹 사이트를 개발 중입니다. 웹 사이트 전체에서 여러 페이지 (홈 페이지, 게시물 작성 페이지, 게시 목록 페이지, 설명 목록 페이지 등)에 게시물을 작성하기위한 양식이 있어야합니다.이 양식은 여러 페이지에 있어야합니다. 다양한 컨트롤러). 이 페이지들 각각은 대응하는 컨트롤러/동작에서 검색되는 다양한 다른 정보를 표시합니다. 예를 들어, 홈 페이지는 최신 게시물 10 개, DB에서 가져온 콘텐츠 등을 표시합니다.여러 페이지에서 같은 양식을 사용하는 레일스 모범 사례
그래서 저는 게시물 작성 양식을 자체 부분으로 이동하고 필요한 부분에이 부분을 포함 시켰습니다. PostsController :: create에 대한 경로 인/questions에 대한 부분 POST의 양식은 기본 레일스 동작입니다.
내가 실행중인 문제는 양식이 올바르게 완료되지 않은 경우입니다. 기본적으로 PostsController :: create 메서드의 질문/new.html.erb를 작성합니다. 양식이 홈 페이지 (/ home/index.html.erb).
"submitting_controller"및 "submitting_action"을 제출하기 위해 부분적으로 양식을 변경하고 PostsController :: create에서 @ post.save를 사용하려고 시도 했습니까? == false, 액션을 렌더링 => "../submitting_controller/submitting_action"(어느 쪽이 약간 해키지만 PostsController가 아닌 사람의 액션을 렌더링 할 수 있습니다).
표면에서 정상적으로 작동하는 것 같습니다. 불완전한 폼은 모든 올바른 @ post.errors 메시지와 함께 제출 된 뷰에서 렌더링되었습니다. 실제 submitting_controller/submitting_action 메소드가 호출되지 않았기 때문에 문제는 페이지의 다른 모든 데이터가 표시되지 않았습니다. 관련 뷰. (Remeber, 나는 모든 오류 메시지와 제출 된 값을 가진 @post 인스턴스 객체를 보존하지 않는 redirect_to가 아닌 인스턴스 객체를 보존하는 렌더링을 수행했습니다.
나는 두 가지 옵션을 가지고 있습니다. :
1) @ post.save를 사용할 때 세션에 @post 객체를 저장할 수 있습니까? PostsController :: create, redirect_to submitting_controller/submitting_action에서 실패합니다. 어떤 시점에서 @post 객체를 세션에서 꺼내서 양식/오류 메시지를 다시 채 웁니다. (내가 아는 한, 세션에서 객체를 저장하는 것은 나쁜 연습이다.)
2) 게시물이 아닌 작성 양식 데이터를 가져 오는 데 사용되는 모든 로직을 다양한 submitting_controller/submitting_action에서 옮길 수 있습니다. ApplicationController, submitting_controller/submitting_action에 대한 PostsController :: create에서 거대한 switch 문을 생성하고 ApplicationController의 메소드를 호출하여 각 제출 페이지의 렌더링에 필요한 모든 추가 데이터를 가져옵니다.
레일스에서 이것을 수행하는 가장 좋은 방법에 대해 생각해보십시오.
Emfi, 중첩 된 속성에 대한 좋은 지적. 그것은 나에게 일어나지 않았다. 또한 JS가 아닌 것으로 기본값을 설정하는 것에 대한 요점은 중요하다고 생각합니다. 문제는 (더 나은 핸들이 없다는 이유로) 질문자가 모든 객체를 재구성하는 데 필요한 DB 작업의 양을 통해 애플리케이션 성능을 해치는 결과를 초래한다는 것입니다. – robertpostill
이것에 우리는 동의한다. 그러나 비 Javascript와 AJAX의 차이점은 대개 link_to_remote 호출, 템플릿을 렌더링하는 RJS 및 일반적으로 달리 수행 할 데이터베이스 호출을 피하기위한 약간의 컨트롤러 논리입니다. – EmFi
EmFi, 불행히도 포스트 모델과 폼을 렌더링하는 데 사용할 컨트롤러의 모델은 관련되지 않을 수 있습니다. (HomeController에는 백킹 모델이 없습니다.) PostChecker :: create (captcha 필드는 게시 모델의 일부가 아니라 자체 모듈)에있는 captcha 메커니즘을 확인합니다. 로버트 포스틸 (Robertpostill)과 아바 엑스 (Ajax)가 모두이 문제를 해결할 수있는 방법이라고 생각합니다.난 그냥 jQuery (나는 Prototype을 사용하지 않기로 결정했다.)를 사용하여 레일스에서 아무 것도하지 말고 알아낼 필요가있다. – empire29