Как отрендерить partial из контроллера?

Товар
....Категория
....Наименование
....Цена
и.тд.

Новый товар:
отображаем форму с полями:
Категория
Наименование
Цена
и т.д.

Пользователь выбирает категорию. В зависимости от категории в форму добавляются поля, специфичные для категории, такие как: диагональ, разрешение, интерфейсы,
либо
мощность, наличие функции гриля,
либо
струйная/лазерная печать, скорость печати
либо
и т.д.

Хотелось бы сделать данную фичу через ajax, чтобы на сервере подготовился html для вставки в существующую форму.
Использую в проекте simple_form.
Как должен приблизительно выглядеть метод контроллера, который отдает Кусок формы в браузер.

Вот мой код контроллера:
def category_details
		simple_form_for @item do |f|
			render partial: "/items/details_edit", locals: {item_form: f}
		end
	end

undefined method `simple_form_for'


Т.е. задача как послать перечень полей формы, который у меня прописан в паршиале без самой формы<form ...></form>?

Либо как по другому организовать предложенную схему?
  • Вопрос задан
  • 299 просмотров
Решения вопроса 1
@sunnmas Автор вопроса
Ruby
Итого получилось.
Контроллер. Экшен для отдачи полей детализации
def category_details
		@item = Item.new
		@item.category = params[:id]
		render 'details_form', layout: false
	end

details_form
<%= simple_form_for @adv do |f| %>
логика, которая в зависимости от @item.category, генерит нужные поля с помощью хелперов simple_form
<% end %>

<i>JavaScript:</i>
	$('#поле с выбором категории').change(function(){
		$('#item_details').empty();
		$.get('/cabinet/category/'+$(this).val()+'/details_form', {},
			function(data){
				$(data).children("[type != hidden]").appendTo('#item_details');
			}
		);
	});

#item_details - контейнер для дополнительных полей в основной форме. При выборе категории, очищаются ранее загруженные дополнительные поля. Потом шлется запрос. Получаем html с формой, у которой отбираем сердцевину с видимыми элементами(.children("[type != hidden]")). Вставляем в контейнер.

В логике генерации полей был задействован хелпер fields_for, а в модель товаров было добавлено accepts_nested_attributes_for, для принятия полей дочерней модели.
Спасибо за помощь, ребята)
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@telray
Не понятно, почему у вас simple_form_for используется в контроллере? Она же должна генерить форму в partial как-раз.
То есть должен быть просто рендер partial, и в него передовать уже item, для которого видимо и строится форма.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы