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

Как добавить в связанную hbtm таблицу данные из формы?

Доброго времени суток не могу понять как сделать форму, ситуация следующая Есть корзина, туда нужно добавлять товары но только задача стоит не с кнопкой "Добавить в корзину" а сразу с указанием количества товара

Создал модель Cart

class Cart < ActiveRecord::Base
	has_and_belongs_to_many :items
end


модель Item
class Item < ActiveRecord::Base
	belongs_to :category
	has_and_belongs_to_many :carts
end


и таблицу CartsItem
class CreateCartsItem < ActiveRecord::Migration
  def change
    create_table :carts_items, id: false do |t|
      t.integer :cart_id
      t.integer :item_id
      add_column :carts_items, :quantity, :decimal
    end
  end
end


теперь делаю форму и никак не могу понять как сразу на форме создавать Cart и отправлять в carts_items все что указано в форме с указанным количеством, подскажите пожалуйста как это сделать

<%= form_for @cart do |f| %>
<% @category.items.each do |item| %>
<ul class="categories-ul clear">
  <li>
    <div class="form-div">
      <div class="item-name left">
        <%= item.name %>
      </div>
      <div class="item-size left">
        <%= item.size %>
      </div>
      <div class="item-desc left">
        <%= item.description %>
      </div>
      <div class="item-price left">
        <%= item.price %>
      </div>
      <div class="item-price left">
        <%= f.text_field :quantity %>
      </div>
    </div>
  </li>
</ul>
<% end %>
<%= f.submit "Заказать" %>
<% end %>
</div>
<% end %>
  • Вопрос задан
  • 2231 просмотр
Решения вопроса 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
Able1991
@Able1991
Пишу на рельсах
Для начала - используйте другую связь
rusrails.ru/active-record-associations
2.4. Связь has_many :through

И что за адская миграция вооббще? пишите по человечески

create_table :carts_items do |t|
  t.references :card
  t.references :item
  t.decimal :quantity
end


Потом почитайте про fields_for и accepts_nested_attributes_for
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы