AdilA
@AdilA
Нравится кодить, изучаю go c echo

Как сохранять несколько записей на одной форме в rails?

Надо на одной форме сохранять несколько записей, сейчас сохраняется только одна. Не пойму почему.
<%= form_for @cart_item do |f| %>
<% @category.items.each do |item| %>
<%= item.name %>
<%= f.hidden_field :item_id, :value => item.id %>
<%= f.text_field :qty %>
<% end %>
<%= f.submit %>
<% end %>


class CartItemsController < ApplicationController

	before_action :set_cart, only: [:create]


	def create
		@cart_items = CartItem.create(cart_items_params)
		@cart_items.cart_id = @cart.id
		if @cart_items.save
		redirect_to :back
		else
			render root_path
		end
	end

	private

	def cart_items_params
		params.require(:cart_item).permit(:id, :qty, :item_id, :cart_id)
	end

	def set_cart
		@cart = Cart.find(session[:cart_id])
	rescue ActiveRecord::RecordNotFound
		@cart = Cart.create
		session[:cart_id] = @cart.id
	end

end


Вот что бы юзер указал количество qty на форме, и ушло только выбранное, сейчас в базу уходит только id 2 хотя указываю количество и на id 1 и на id 2.
Помогите пожалуйста!
  • Вопрос задан
  • 2343 просмотра
Решения вопроса 1
AdilA
@AdilA Автор вопроса
Нравится кодить, изучаю go c echo
После 4 часов мучения сделал так, не знаю правильно ли... но все сохраняется как положено
контроллер
def create
		@cart_items = params[:cart_items]
		@cart_items.each do |c|
			@cart_item = CartItem.new(c)
			if @cart_item.qty.present?
				@cart_item.cart_id = @cart.id
				@cart_item.save
			end
		end
		redirect_to :back
	end

и форма
<%= form_tag cart_items_path do %>
<% @cart_items.each do |cart_item| %>
<%= fields_for "cart_items[]", cart_item do |f| %>
    <% @category.items.each do |item| %>
      <%= item.name %>
      <%= f.hidden_field :item_id, value: item.id %>
      <%= f.text_field :qty %>
    <% end %>
    <%= f.submit %>
  <% end %>
  <% end %>
<% end %>
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
Prognosticator
@Prognosticator
TODO: Здесь будут ворованные умные мысли, типа мои
Ваш ответ на вопрос

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

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