2012-12-20 3 views
2

재 작성여러 form_fors 내가이 개 모델을 가지고있는 _method 속성

문제를 일으키는 것입니다. 앱 및 대화. 앱은 여러 대화

resources :apps do 
    resources :conversations 
end 

내가 단일 뷰가 들어있는 태그의 양식을 사용하여 2 개 형태의. 첫 번째 양식은 앱 모델을 업데이트하기위한 것입니다. 다른 하나는 대화를 작성하거나 업데이트하기위한 것입니다.

내가 겪고있는 문제는 form_for 태그를 사용하면 결과 HTML이 _method 입력을 생성하지 않는다는 것입니다.

EG 대화 형식. 이 문제를 갖는 하나로서

<form accept-charset="UTF-8" action="/apps/50c87614e976a31149000009/conversations" class="new_conversation ng-pristine ng-valid" id="new_conversation" method="post"> 

<div style="margin:0;padding:0;display:inline"> 
<input name="utf8" type="hidden" value="✓"> 
<input name="authenticity_token" type="hidden" value="RqwwgBb737uuwg3PgRS+z0qlOP1aDqWe+2hrEeU0KHk="> 
</div> 

앱 양식

<form accept-charset="UTF-8" action="/apps/50c87614e976a31149000009" class="edit_app ng-pristine ng-valid" enctype="multipart/form-data" id="edit_app_50c87614e976a31149000009" method="post"> 
<div style="margin:0;padding:0;display:inline"> 
<input name="utf8" type="hidden" value="✓"> 
<input name="_method" type="hidden" value="put"> 
<input name="authenticity_token" type="hidden" value="RqwwgBb737uuwg3PgRS+z0qlOP1aDqWe+2hrEeU0KHk="></div> 

은 지금의 대화 모델에 집중할 수 있습니다.

위의 html에서 대화 형식에서 게시물 요청을 보내야합니다. 불행히도 레일 앱에 의해 수신되면 puts 요청으로 처리됩니다.

form_for에 대한 설명서를 보면 form_for이 _method라는 숨겨진 입력 필드를 설정해야한다는 것을 알고 있습니다.

대화 형식을보고이를 응용 프로그램 양식과 비교하면 대화에 _method 특성이 없음을 알 수 있습니다. 나는 이것이 왜 있는지를 판단 할 수 없다.

왜 이것이 무시되고있는 이유가 있습니까? 또는 대화 양식을 제출할 때 게시 대신 게시가 전송되는 이유는 무엇입니까?

+0

컨트롤러의 모양은 어떻습니까? 그 루트는 어떤가? – PerfectlyNormal

+0

@PerfectlyNormal 컨트롤러와 경로는 리소스로 정의 된 표준 휴식 경로입니다. 그러나 컨트롤러 경로는 앱 안에 중첩되어 있습니다. 무슨 뜻인지 업데이트 된 질문을 참조하십시오. 왜 물어 보니? – OVERTONE

+0

나는 괜찮은 것 같아 보이지만 이후로는 코드의 나머지 부분을 살펴보면 아마도 도움이 될 것 같아서 물었다. 'form_for'는 요청이 POST가 아닌 다른 것으로 취급 되어야만하므로'_method' 필드를 설정하므로 문제가되지 않습니다. – PerfectlyNormal

답변

0

레일즈는 put 값을 가진 _method이라는 숨겨진 입력을 포스트 폼으로 HTTP 풋을 구현합니다. PUT 요청으로 처리중인 양식에 숨겨진 입력이 표시되어야합니다.

form_for은 이미 양식을 작성중인 개체가있을 때 put 양식을 생성합니다.

+0

질문을 업데이트했습니다. 개체가없는 경우에도 동일한 _method가 생성됩니까? 예 : _method => '게시' 예 : 위 게시해야 함 – OVERTONE