Rails Dynamic Form - вызов контроллера с параметрами SimpleForm для обновления страницы - PullRequest
0 голосов
/ 20 мая 2018

Я разрабатываю страницу, на которой пользователь может создать новый Продукт .

Каждый продукт имеет Модель продукта , которая имеет некоторыеполя типа :id, :name, :description и т. д.

На этой странице Product у меня есть <select>, где пользователь сможет выбрать Модель продукта .Что я хочу сделать, так это то, что когда пользователь выбирает Модель продукта , страница должна обновляться, отображая детали выбранного Модель продукта .

Как это сделать?

1 Ответ

0 голосов
/ 21 мая 2018

Пример того, что вы можете сделать с помощью javascript (на основе изменения выбора):

Сначала определите маршрут в коллекции для пользовательского метода ProductModel.Давайте назовем это find:

resources :product_models do
  get 'find', on: :collection  #=>output: /product_models/find/:id
end

В ProductModelsController заставить метод find отвечать на формат js:

def find
  @product_model = ProductModel.find(params[:id])
  respond_to { |format| format.js }
end

Предполагая, что в вашем application.js есть jQuery(или другой пользовательский js-файл, который вы хотите), создайте ajax-вызов, чтобы найти product_model:

$(document).on('turbolinks:load', function() {
  $('#product_product_model_id').on('change', function(){ //<-- the id selector is returned by simple_form
    $.ajax({
      type: "GET",
      url: "/product_models/find/?id=" + $(this).val(),
      success: function(data) {
      },
      error: function(jqXHR) {
        console.error(jqXHR.responseText);
      }
    })
  })
})

В вашем новом представлении Product под вашей формой визуализируйте частичное имя с именем, например, «selected_product_model»":

#new.html.erb
<% simple_form_for @product do |f| %>
  #... the form
  f.association :product_model
<% end %>

<div>
  <%= render partial: 'selected_product_model' %>
</div>

И частично создайте HTML-селекторы, в которых будут отображаться данные:

#_selected_product_model.html.erb
<p id="pm-id"></p>
<p id="pm-name"></p>
<p id="pm-desc"></p>

Затем создайте файл find.js.erb (в папке views> product_models)чтобы обновить частичное при выбранном изменении:

# @product_model comes from the controller find#product_models
$('#pm-id').html("ID: <%= j @product_model.id.to_s %>")
$('#pm-name').html("Name: <%= j @product_model.name %>")
$('#pm-desc').html("Description: <%= j @product_model.description %>")

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

...