Модальная форма Ruby on Rails, отправляемая в неправильную БД - PullRequest
0 голосов
/ 06 декабря 2018

У меня есть модал на странице поиска / показа:

<button name="button" type="button">
  <a class="nav-link" data-toggle="modal" data-target="#emailFriendModal" href="">Email Results to Friend</span></a>
</button>

При нажатии модал правильно отображает этот фрагмент (большая часть кода отредактирована для краткости):

<div class="modal fade" id="emailFriendModal">
  ...
  <div class="mx-auto text-left column">   
  <%=form_with id: :friend_email_form, url: friend_emails_create_path do |f|%>            
      ...
    <%= recaptcha_tags %>
    <div class="actions">
      <%= f.submit "Send Email", class: 'btn btn-primary', "onclick":"submit_form();", "data-dismiss":"modal"%>
    </div>
    <script>
      function submit_form() {
      document.getElementById('friend_email_form').submit();
      }
    </script>
  <%end%>
</div>

Но при отправке объект не отправлен на контроллер Friend_emails:

class FriendEmailsController < ApplicationController

  def new
    @friend_email = FriendEmail.new
  end

  def create
    @friend_email = FriendEmail.new(message: params[:message], email: params[:email], email2: params[:email2], path: params[:path])
    if @friend_email.save
      redirect_back fallback_location: root_path, notice: "Your email has been sent"
    else
      redirect_back fallback_location: root_path, notice: "Sorry, something went wrong, please try again"
    end
  end

  def friend_email_params
    params.require(:friend_email).permit(:message,:email,:email2,:path)
  end

end

Когда нажата кнопка «Отправить другу», всплывает правильная часть, но когдаФорма отправлена, объект Tour создан (не объект Friend_email !!).Отображается сообщение о туре, отправляется электронное письмо о туре.При отправке информация полностью обходит контроллер Friend_emails и направляется прямо к контроллеру тура.

Маршруты:

post "friend_emails/create"
post "tours/create"

Рейк-маршруты:

friend_emails_create POST   /friend_emails/create(.:format) friend_emails#create
tours_create POST           /tours/create(.:format)    tours#create 

Контроллер туровв случае, если это полезно:

class ToursController < ApplicationController

  def index
    @tours = Tour.all
  end

  def new
    @tour = Tour.new
  end

  def create
    @tour = Tour.new(day: params[:day], time: params[:time], user_id: params[:user_id], listing_id: params[:listing_id], school_id: params[:school_id],
      email: params[:email])

    if @tour.save
      redirect_back fallback_location: root_url, notice: "Your tour request has been sent; we will be in touch soon with confirmation."
    else
      redirect_back fallback_location: root_url, notice: "#{@tour.errors.full_messages}"
    end
  end

  def destroy
    @tour = Tour.find(params[:id])
    @tour.destroy
    redirect_back fallback_location: root_url, notice: "Your Tour has been Cancelled"
  end


  def tour_params
    params.require(:tour).permit(:tour_req, :user_id, :listing_id, :school_id, :email, :day, :time)
  end
end

И, наконец, это отрывок из макета приложения, который содержит партиалы.

<%= yield %>
<% unless user_signed_in? %>
  <%= render partial: 'devise/registrations/new' %>
  <%= render partial: 'devise/sessions/new' %>
<% end %>
<%= render partial: 'friend_emails/new'%>
<%= render partial: 'tours/new'%>

1 Ответ

0 голосов
/ 08 декабря 2018

Я разобрался в проблеме.У меня было два модальных макета приложения, и код ссылался на одну и ту же функцию javacript submit ().Исправление состояло в том, чтобы изменить имя функции submit () следующим образом:

<div class="actions">
      <%= f.submit "Send Email", class: 'btn btn-primary', "onclick":"submit_form2();", "data-dismiss":"modal"%>
    </div>
<script>
  function submit_form2() {
  document.getElementById('friend_email_form').submit();
  }
</script>

Теперь у нас есть две функции javascript, submit_form () и submit_form2 (), и все работает как надо.

...