복붙노트

[RUBY-ON-RAILS] 어떻게 레일에서 같은 양식 버튼을 제출 여러 만듭니 까?

RUBY-ON-RAILS

어떻게 레일에서 같은 양식 버튼을 제출 여러 만듭니 까?

여러 개의 버튼을 제출이 필요합니다.

나는 Contact_Call의 인스턴스를 생성하는 형태를 갖는다.

하나 개의 버튼을 정상으로 만듭니다.

다른 버튼을 만들지 만 다른이 있어야합니다 : 기본에서 속성 값을, 또한 컨트롤러에서 사용되는 다른에 속성이 있지만, 관련 모델을 설정해야합니다.

어떻게 그렇게 할 수 있습니까? [: PARAMS] 난 너무 의해 선택됩니다 다른 변수를 보낼 수있는 방법이, 경로를 변경할 수 없습니다?

그때한다면, 나는 case 문을 설정, 컨트롤러에 무엇을해야합니까?

해결법

  1. ==============================

    1.여러 버튼을 제출하고 각각에 다른 값을 제공 만들 수 있습니다 :

    여러 버튼을 제출하고 각각에 다른 값을 제공 만들 수 있습니다 :

    <% form_for(something) do |f| %>
        ..
        <%= f.submit 'A' %>
        <%= f.submit 'B' %>
        ..
    <% end %>
    

    이 출력됩니다 :

    <input type="submit" value="A" id=".." name="commit" />
    <input type="submit" value="B" id=".." name="commit" />
    

    컨트롤러 내부, 제출 버튼의 값은 매개 변수 커밋을 식별 할 것이다. 필요한 처리를 할 수있는 값을 확인 :

    def <controller action>
        if params[:commit] == 'A'
            # A was pressed 
        elsif params[:commit] == 'B'
            # B was pressed
        end
    end
    

    그러나, 매우 바람직하지 않을 수있는이 단단히 커플 컨트롤러에보기를 기억 해요.

  2. ==============================

    2.또 다른 방법은 제출 버튼의 formaction 속성을 사용하여도 있습니다 :

    또 다른 방법은 제출 버튼의 formaction 속성을 사용하여도 있습니다 :

    <% form_for(something) do |f| %>
        ...
        <%= f.submit "Create" %>
        <%= f.submit "Special Action", formaction: special_action_path %>
    <% end %>
    

    표준 깨끗한 코드 숙박이 어떤 변화를 필요로하지 않는 버튼을 만들 경우에만 특수 버튼의 라우팅 경로 삽입 :

  3. ==============================

    3.버튼의 속성 이름을 변경 눌러 진 당신은 대안으로 인식 할 수 있습니다.

    버튼의 속성 이름을 변경 눌러 진 당신은 대안으로 인식 할 수 있습니다.

    <% form_for(something) do |f| %>
        ..
        <%= f.submit 'A', name: 'a_button' %>
        <%= f.submit 'B', name: 'b_button' %>
        ..
    <% end %>
    

    값을 : [커밋] : 그것은 당신이 PARAMS 키의 존재를 확인하는 대신 단순히 PARAMS을 확인해야하기 때문에 조금 불편 비트의 [: a_button] 또는 PARAMS [: b_button 하나를 누른에 따라 당신은 PARAMS을 받게됩니다.

  4. ==============================

    4.어떤 보석을 사용하지 않고 @ vss123가 제시 한 유사 솔루션 :

    어떤 보석을 사용하지 않고 @ vss123가 제시 한 유사 솔루션 :

    resources :plan do
      post :save, constraints: lambda {|req| req.params.key?(:propose)}, action: :propose
      post :save, constraints: lambda {|req| req.params.key?(:finalize)}, action: :finalize
    end
    

    I 버튼 값을 값과 사용 입력 이름을 사용하지 않고 이후 제출하는 것을 알 수 종종 번역 / 국제화된다. 또한, 나는 그것이 신속하게 경로 파일을 혼란 때문에 너무 많은이를 사용하지 않는 것입니다.

  5. ==============================

    5.우리는 레일에 고급 제약 조건을 사용하여 해결했다.

    우리는 레일에 고급 제약 조건을 사용하여 해결했다.

    아이디어는 동일한 경로 (따라서 같은 이름의 경로 및 행동)하지만 다른 작업에 라우팅 제약하는 것입니다.

    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 등이 가능합니다.

  6. ==============================

    6.오래된 질문은,하지만 난 같은 상황을 처리했습니다 때문에, 나는 내 솔루션을 게시 할 거라고 생각했다. I 컨트롤러 로직과보기 버튼 사이의 불일치를 피하고 제어 상수를 이용하고있다.

    오래된 질문은,하지만 난 같은 상황을 처리했습니다 때문에, 나는 내 솔루션을 게시 할 거라고 생각했다. I 컨트롤러 로직과보기 버튼 사이의 불일치를 피하고 제어 상수를 이용하고있다.

    class SearchController < ApplicationController
      SEARCH_TYPES = {
        :searchABC => "Search ABCs",
        :search123 => "Search 123s"
      }
    
      def search
        [...]
        if params[:commit] == SEARCH_TYPES[:searchABC]
          [...]
        elsif params[:commit] == SEARCH_TYPES[:search123]
          [...]
        else
          flash[:error] = "Search type not found!"]
          [...]
        end
      end
      [...]          
    end
    

    다음보기에서 :

    <% form_for(something) do |f| %>
        [...]
        <%= f.submit SearchController::SEARCH_TYPES[:searchABC] %>
        <%= f.submit SearchController::SEARCH_TYPES[:search123] %>
        [...]
    <% end %>
    

    컨트롤러에서 상수로 -이 방법은 텍스트는 한 장소에 살고있다. 나는 그러나, 아직이 문제를 국제화하는 방법을 알아 내려고 시도하지 않았습니다.

  7. ==============================

    7.그래서 이름 만 나를 위해 충분하지 않아 사용 nested_form_fields에 내 양식 덕분에 제출 버튼의 변수 번호를 가지고있다. 나는 형태의 숨겨진 입력 필드를 포함하여 양식 중 하나가 누른 버튼을 제출할 때 그것을 채우기 위해 자바 스크립트를 사용하여 끝났다.

    그래서 이름 만 나를 위해 충분하지 않아 사용 nested_form_fields에 내 양식 덕분에 제출 버튼의 변수 번호를 가지고있다. 나는 형태의 숨겨진 입력 필드를 포함하여 양식 중 하나가 누른 버튼을 제출할 때 그것을 채우기 위해 자바 스크립트를 사용하여 끝났다.

  8. from https://stackoverflow.com/questions/3027149/how-do-i-create-multiple-submit-buttons-for-the-same-form-in-rails by cc-by-sa and MIT license