Перемещение рельсов формы в отдельный вид - PullRequest
0 голосов
/ 01 октября 2018

В моем приложении rails 5 есть форма, которая принимает пользовательские данные и сохраняет их в базе данных mysql.

Все отлично работает.Однако я хочу переместить эту форму в отдельное представление, которое не соответствует имени класса / модели, имени контроллера и представлению.

Может ли это быть сделано путем простого преобразования формы в отдельное представление как частичное?

Любой совет был бы отличным.

Файл контроллера:

class UserLeadsController < ApplicationController

  def index
    @user_lead = UserLead.all
  end

  def new
    @user_lead = UserLead.new

    @lead_reasons = LeadReason.all.map{ |r| [r.name, r.id] }
    @lead_sources = LeadSource.all.map{ |s| [s.name, s.id] }
  end

  def create
    @user_lead = UserLead.new(user_lead_params)
    @user_lead.lead_reason_id = params[:lead_reason_id]
    @user_lead.lead_source_id = params[:lead_source_id]

    @user_lead.save

    redirect_to user_leads_path
  end

  private

  def user_lead_params
    params.require(:user_lead).permit(:name, :businessname, :phone, :email, :amount)
  end
end

Допустим, это UserLeadController, я хочу поместить его частичную форму в представление внутри моего HomeController?Можно ли это сделать?

Это частичное, оно говорит мне, что @user_lead - ноль или пусто?Кажется, я не вижу, как это?

<%= form_for @user_lead, url: user_leads_path, html: {class: 'col-12'}, remote: true do |f| %>
        <div class="col-12 px-0 text-center">
          <h4 class="fl-color-navy">Some heading here</h4>
        </div>
        <div class="col-12 progress-container-center">
          <div class="col-12 progress-bar-block">
            <div class="progress-bar">
              <ol class="progress-steps">
                <li class="progress-step step1 current-step" style="width: 0%;"> <span class="count highlight-index"></span></li>
                <li class="progress-step step2 current-step" style="width: 100%;"> <span class="count"></span></li>
              </ol>
            </div>
          </div>
        </div> ....

1 Ответ

0 голосов
/ 01 октября 2018

Рендеринг форм в частичном работает нормально.Отправка формы направит браузер к контроллеру как обычно, если представление правильное (предположительно UserLeadsController#create, вопрос не включает код представления).

Если такие вещи, как @lead_reasons и @lead_sourcesважно сделать вид, это немного сложнее.Конечно, в простых случаях частичное может просто сделать это встроенным, вы также можете, например, добавить вспомогательный метод, который получает их, а затем визуализирует частичное прохождение, передавая параметр locals.например,

module ApplicationHelper
    def user_leads_form
        lead_reasons = LeadReason.all.map{ |r| [r.name, r.id] }
        lead_sources = LeadSource.all.map{ |s| [s.name, s.id] }
        render partial: "user_leads_form", locals: {lead_reasons: lead_reasons, lead_sources: lead_sources}
    end
end

Если вы хотите, чтобы в некоторых случаях он возвращался на предыдущую страницу, например, для ошибок проверки, вам необходимо добавить это, возможно, добавив параметр в форму или осмотрев Referer заголовок запроса (преднамеренное неправильное написание!).

Если вы хотите, чтобы он вообще не покидал страницу, то это относится к решениям сценариев на стороне клиента.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...