Как отправить скрытую форму с omniauth в рельсах

Я включил Google и Facebook Omniauth в моем приложении Rails. Регистрация и вход работает отлично. Но у меня также есть форма, которую нужно отправить вместе с omniauth, чтобы я мог получить доступ к содержимому формы в качестве параметров.

Это кусок кода:

%section#hero.hero-blk
.container
  .intro.text-center
    %h1 Ask Question Instantly
    %h3.hero-tagline Ask anonymously anytime
  .row
    .col-md-6
      .ask-question
        %h2.text-center Talk to us
        %form{method: 'post', action: new_forward_questions_path}
          =hidden_field_tag :authenticity_token, form_authenticity_token
          %textarea.form-control{:autofocus => "", :cols => "20", :id => "question-content", :name => "content", :placeholder => "Describe your question on relationship, marriage. Please type atleast 50 characters", :rows => "7"}
          %div#chars-left
          %input{type: 'hidden', name: 'source', value: 'home'}
          .text-center
            %button#ask-button-index.glow-button.btn.btn-primary{type: 'submit'}
              %img{:alt => "", :src => image_path("incognito-new.svg")}/
              Ask Anonymously

.modal-body
    #dialog-loading-icon.collapse
      %p
        Please wait, submitting your question
      =image_tag "ripple.gif"
    = simple_form_for @question do |f|
      = f.input :content, as: :hidden, input_html: {id: 'hidden_question_content'}
      - if current_user.nil? or current_user.asker.nil? or current_user.asker.new_record?
        .social-sign-in.visitor-oauth.text-center
          = link_to "Sign up with Gmail", user_google_oauth2_omniauth_authorize_path(@question), class: "zocial gmail"
          = link_to "Sign up with Facebook", user_facebook_omniauth_authorize_path, class: "zocial facebook"

Ниже приведен скриншот сгенерированного html. Как вы можете видеть, модальная форма заполняется "Oauth Oauth Oauth". Это контент, который я пишу внутри текстовой области, и когда я нажимаю на кнопку, появляется модал, который имеет тот же контент, что и я. напечатал: HTML генерируется

Я попытался передать @question здесь, но ничего не проходит. В контроллере я пытаюсь получить доступ к параметрам через request.env["omniauth.params"], но он всегда пуст.

Как я могу получить доступ или передать этот параметр содержимого в omniauth и получить доступ к нему в контроллере?

1 ответ

Решение

Вам не нужна форма здесь, так как content это скрытый вход. Вы можете передать его в качестве дополнительных параметров link_to как ниже

= link_to "Sign up with Gmail", user_google_oauth2_omniauth_authorize_path(content: "Your desired value"), class: "zocial gmail"

и искать content в request.env["omniauth.params"]

Обновить:

Единственный способ, которым я могу придумать, это добавить значение содержимого в URL для события click, используя Javascript of Jquery.

<script type="text/javascript">
  $(".gmail, .facebook").click(function(){
    var hidden_content = $("#hidden_question_content").val();
    var url = $(this).attr('href');
    window.location.href = "url?content="+hidden_content;
  });
</script>