[RUBY-ON-RAILS] 레일 : 하나의 폼에 버튼을 멀티 제출
RUBY-ON-RAILS레일 : 하나의 폼에 버튼을 멀티 제출
내가 제 모델을 가지고 있고, 문서에 '새로운'나 '게시'및 '임시 보관함에 저장 "두 개의 버튼을 볼 수 말해봐.
내 질문은 내가 컨트롤러에서 클릭하는 버튼을 알 수있는 방법이다.
이미 해결책을 가지고 있지만 더 나은 방법이있을 것 같아요. 내가 현재 뷰에 사용하는 것입니다 :
<div class="actions">
<%= f.submit "Publish" %>
<%= f.submit "Save Draft", :name => "commit" %>
</div>
해당 작업을 처리하기 위해 문자열 : [커밋] 그래서 컨트롤러, 나는 PARAMS를 사용할 수 있습니다.
def create
@article = Article.new(params[:article])
if params[:commit] == "Publish"
@article.status = 'publish'
// detail omitted
end
@article.save
end
그러나 나는보기와 관련된 문자열을 사용하는 것은 좋지 않다라고 생각합니다. 당신은 나에게이 작업을 수행하는 또 다른 방법을 알 수 있을까요?
업데이트 :이 버튼은 같은 형태이기 때문에, 그들은 모두 '만들기'활동에 가고, 그리고 나를 위해의 확인을하는 것입니다. 내가 원하는 것은 조치를 만들 내에서, 그러한 같은 조 모델에 '상태'열을 포기하고 '공개'또는 '초안'을 보유하고 있음을 처리하는 것입니다.
해결법
-
==============================
1.이 클릭 올바른 방법입니다 된 버튼을 검출하기 위해 PARAMS 해시를 사용 Railscast 에피소드 38에 포함되었다 :
이 클릭 올바른 방법입니다 된 버튼을 검출하기 위해 PARAMS 해시를 사용 Railscast 에피소드 38에 포함되었다 :
전망:
<%= submit_tag 'Create' %> <%= submit_tag 'Create and Add Another', name: 'create_and_add' %>
제어 장치:
if params[:create_and_add] # Redirect to new form, for example. else # Redirect to show the newly created record, for example. end
-
==============================
2.우리는 레일에 고급 제약 조건을 사용하여 해결했다.
우리는 레일에 고급 제약 조건을 사용하여 해결했다.
아이디어는 동일한 경로 (따라서 같은 이름의 경로 및 행동)하지만 다른 작업에 라우팅 제약하는 것입니다.
resources :plan do post :save, constraints: CommitParamRouting.new("Propose"), action: :propose post :save, constraints: CommitParamRouting.new("Finalize"), action: :finalize end
방법의 일치를 가지고 간단한 클래스입니다 CommitParamRouting? 이는이 PARAM 지정된 인스턴스 ATTR 일치 위탁하는 경우 true를 반환합니다. 값.
보석의 commit_param_matching 등이 가능합니다.
-
==============================
3.그것은 또한이 같은 form_for 헬퍼에 수행 할 수 있습니다
그것은 또한이 같은 form_for 헬퍼에 수행 할 수 있습니다
<%= f.submit "Publish",name: "publish", class: "tiny button radius success" %> <%= f.submit 'Mark as Draft', name: "draft", class: "tiny button radius " %>
상기 로직은 컨트롤러 같다
if params[:publish] // your code elsif params[:draft] // your code end
-
==============================
4.나는 한 번이 문제를 통해 오는 기억한다. 당신은 PARAMS에 따라 일부 조치를 두 개의 버튼을 유지하고 호출 할 수 없습니다 [: 커밋]. 는 버튼의 onclick 양식을 참조하는 URL을 호출하는 것입니다 제출합니다. 원하는 동작을 얻기 위해 어떤 나쁜의 방법이 있습니다. 양식을 참조하는 조치를 호출하고 액션을 호출하는 또 다른 버튼을 얻을 수있는 버튼을 계속, 나는 버튼을 일치하도록 변경 한 후 스타일을 LINK_TO을 사용합니다. 또한, 또는 당신은 따라서 조치가 실행시에 호출되는 것을 결정, 양식을 부를 것이다 URL을 변경하는 jQuery를 사용할 수 있습니다. 도움이 되었기를 바랍니다.
나는 한 번이 문제를 통해 오는 기억한다. 당신은 PARAMS에 따라 일부 조치를 두 개의 버튼을 유지하고 호출 할 수 없습니다 [: 커밋]. 는 버튼의 onclick 양식을 참조하는 URL을 호출하는 것입니다 제출합니다. 원하는 동작을 얻기 위해 어떤 나쁜의 방법이 있습니다. 양식을 참조하는 조치를 호출하고 액션을 호출하는 또 다른 버튼을 얻을 수있는 버튼을 계속, 나는 버튼을 일치하도록 변경 한 후 스타일을 LINK_TO을 사용합니다. 또한, 또는 당신은 따라서 조치가 실행시에 호출되는 것을 결정, 양식을 부를 것이다 URL을 변경하는 jQuery를 사용할 수 있습니다. 도움이 되었기를 바랍니다.
-
==============================
5.또한 제출 버튼을 일부 데이터 속성을 설정하고 버튼 중 하나를 클릭의 양식 동작을 변경 자바 스크립트를 사용할 수
또한 제출 버튼을 일부 데이터 속성을 설정하고 버튼 중 하나를 클릭의 양식 동작을 변경 자바 스크립트를 사용할 수
-
==============================
6.일반적으로 내가 존 Topley에 의해 주어진 제안을 사용하여 (위의 답 참조). 또 다른 방법은 JS시 클릭 형태 액션 attribute- 변경 / jQuery를 사용하는 버튼을 제출 예:
일반적으로 내가 존 Topley에 의해 주어진 제안을 사용하여 (위의 답 참조). 또 다른 방법은 JS시 클릭 형태 액션 attribute- 변경 / jQuery를 사용하는 버튼을 제출 예:
form_tag({} ,:method => 'post', :id => 'reports_action') do ....... ....... submit_tag 'submit', :onclick => "return changeAction();" end
그리고 .....
function changeAction(){ $('#reports_action').attr('action','my_new_action'); }
from https://stackoverflow.com/questions/3332449/rails-multi-submit-buttons-in-one-form by cc-by-sa and MIT license
'RUBY-ON-RAILS' 카테고리의 다른 글
[RUBY-ON-RAILS] 레일 - 협회의 유효성 존재를? (0) | 2020.02.18 |
---|---|
[RUBY-ON-RAILS] 클라이언트 IP 주소를 가져 오기 : 난간 (0) | 2020.02.18 |
[RUBY-ON-RAILS] (4) 레일 - 부분적으로 가변 전달 (0) | 2020.02.18 |
[RUBY-ON-RAILS] 다른 표준 "생산"이 아닌 데이터베이스 또는 "개발"에 레일 마이그레이션을 사용하여 (0) | 2020.02.18 |
[RUBY-ON-RAILS] 어떻게 레일 외부 루비 스크립트에서 액티브를 사용 하는가? (0) | 2020.02.18 |