2009-10-15 5 views
1

레일에 2 개의 버튼이있는 폼을 하나 만들고 싶습니다. 두 양식 모두 다른 방식으로 동일한 데이터에서 작동하므로 두 가지 방법으로 관련 기능을 유지하는 것이 좋습니다. 이전에는 params [: commit]에서 문자열 비교를 수행 한 후 적절한 방법으로 리디렉션되었지만 더 나은 방법이 있다고 말합니다. 제안?레일스에서 ​​여러 가지 가능한 작업으로 하나의 양식을 만드는 방법은 무엇입니까?

답변

0

이미 양식에 params [: commit] 메서드를 사용했습니다. I18n 헬퍼를 사용하면 뷰와 컨트롤러에서 동일한 룩업을 사용할 수 있기 때문에 조금 약해져서 문자열이 약간 변하는 문제는 발생하지 않습니다.

게다가 자바 스크립트를 사용하여 버튼 클릭을 처리 한 다음 양식 데이터를 다른 레일스 액션으로 보낼 수 있습니다 (양식을 제출하기 전에 자바 스크립트로 HTML 액션 특성을 변경할 수 있음) .

0

prototype.js를 사용하는 경우 Form.serialize()를 사용하여 양식의 데이터를 가져 와서 다른 버튼을 사용하여 다른 작업에 게시 할 수 있습니다.

1

자바 스크립트를 사용하지 않고 유일한 해결책은 컨트롤러의 POST 데이터를보고 클릭 한 버튼을 확인하는 것입니다. 이것은 단순히 HTML 양식 요소의 특성 때문입니다. 액션 속성에 대해 하나 이상의 값을 가질 수 없습니다.

JavaScript를 사용할 수 없을 때 어떤 일이 발생할지 걱정하지 않는다면 실제로 제출하기 전에 제출 버튼 중 하나를 클릭하면 스크립트가 동작 속성을 변경하도록 작성할 수 있습니다. Ajax 요청의 경우 폼의 속성을 변경하지 않고 올바른 URL에 직접 제출할 수 있습니다.

대신 "myForm을"의
<%= submit_tag('Insert', :onclick=>"document.myForm.action = 'insert';") %> 
<%= submit_tag('Update', :onclick=>"document.myForm.action = 'update';") %> 

당신이 당신의 태그의 "이름"속성에 무엇이든 둘 필요가 : 다른

2

두 개의 서로 다른 행동 양식을 보내 버튼을 제출합니다.

당신은 당신의 기본 형태로 그 속성을 설정할 수 있습니다

:

<%= form_for(@something, :html => {:name => "myForm"}) do |f| %> 
이 같은 태그
관련 문제