2011-09-13 5 views
0

페이지가 # 개있는 페이지가 있습니다. 나는 그 페이지 안에 메시지 양식을 만들었습니다. 제출시이 오류 "라우팅 오류 경로가 [POST]/pages/9와 일치하지 않습니다."가 표시됩니다.레일 3 : 다른 모델의 쇼 방식으로 양식을 제출하는 방법

다른 모델의 표시 페이지에있는 양식입니다. 이 경우에는 페이지 표시보기 내에서 Message 모델과 함께 작동하는 양식입니다. 지정된

<%= form_for(@message, :url => page_path(@page)) do |f| %> 
<div class="field"> 
    <%= f.label :content %><br /> 
    <%= f.text_area :content %> 
</div> 
<div class="actions"> 
    <%= f.submit %> 
</div> 
<% end %> 

답변

0

URL입니다 :

URL => page_path (@page)

메시지를 만드는 데 사용되는 경로이어야한다.

rake routes을 실행하면 현재 앱에있는 모든 경로를 찾을 수 있습니다.

+0

는, 그것이 저를 할게요 messages # 새로운 동작, 페이지 # show에서 오류를 정말로 표시하고 싶을 때. – leonel

+0

aresen의 답변을 확인하십시오. 대답은 올바른 메시지 작성 URL에 게시하면 오류가있는 경우 페이지에서 show 액션을 렌더링해야합니다. – Msencenb

0

당신은 그것을 :url => page_path(@page)이라고합니다. 나는 당신에게 /pages/9이 있다고 가정합니다. the : url을 그냥 생략 해보십시오. 이것이 새로운 메시지이고 올바른 길로 인도 할 것입니다. 그렇지 않으면 명시 적으로 나타내려면 :url => message_path과 같아야합니다 (자원의 루트 경로에 대한 POST가 일반적으로 작성 조치에 맵핑되기 때문에 message_path에 대한 인수가 없음을 유의하십시오). 당신은 받을 다음, '/ 메시지'경로로 요청을 보낼 AJAX를 사용하여 페이지를 다시로드하지 않고 오류를 표시하거나 루트 조금 변경

+0

생략하면 유효성 검사 오류가 발생하면 메시지 # 새 작업으로 이동합니다. , 내가 정말로 페이지 # show에서 오류를 표시하고 싶을 때. – leonel

+0

그게 전부 당신의 컨트롤러 조치가 작성된 결과입니다. 페이지로 돌아가려면'redirect : back'을 사용하거나'request.referer'를 사용하여 그것을 찾아 낼 수 있습니다. – dantswain

1

.

match "pages/:id", :via=>:post, :controller=>"pages", :action=>"create_message" 

그런 다음 평소 create 행동과 유사한 방식으로 동작 create_message을 정의 :

은 추가 경로를 정의 메시지가 생성 된 경우, /pages/:id로 리디렉션 및 에러가 발생했을 경우, 렌더링 " 보여줍니다 "행동. 오류의 경우

, 당신은 또한 "쇼"가 (코드 422이 좋은 모양)보기을 렌더링 할 때 적절한 HTTP 상태 코드를 반환에 대해 기억해야하고, 단지 "쇼"@message 수를 알고 볼 수 있도록 오류 메시지.

나는 메시지 (A POST /page/3/messages가 더 나은 솔루션과 같은)을 만드는이 방법을 좋아 여부를 잘 모르겠지만, 나는이 나쁜 일이라고하지 확신합니다. ;-)

+0

AJAX에 관한 내용이지만 웹 사이트 방문자가 Javascript를 사용하지 않으면 어떻게됩니까? 먼저 비 자바 스크립트 솔루션에 의존해야합니다. – leonel

+0

그럼 내 영웅이야!;-) 나는 말했다 : "AJAX **를 사용하거나 ** 당신의 경로를 변경하십시오." 핵심 답변은 비 AJAX 솔루션에 관한 것입니다. 물론, 문제없이 AJAX에 추가 할 수 있습니다. – Arsen7

관련 문제