그래서 내 레일 시스템에 제품 시스템과 장바구니를 만들었습니다. 내가 가지고있는 목표는 카트에서 저장된 제품의 ID를 사용자 모델에 추가하는 것입니다. 따라서 장바구니보기 페이지에는 장바구니에 추가 된 모든 제품의 목록이 있으며 해당 제품을 사용자 테이블의 열에 저장하는 저장 버튼을 추가하려고합니다. 예를 들어 current_user가 장바구니에 1,2,3 개의 ID가있는 3 개의 제품을 광고하고 장바구니의 '저장'버튼을 클릭하면 3 개의 열에 정수로 3 개의 ID를 저장할 수 있습니다. product_one, product_two , current_user의 product_three.아이디를 사용자 열에 저장하는 방법
class Item < ActiveRecord::Base
has_one :cart
end
class User < ActiveRecord::Base
has_one :cart
has_many :items, through: :cart
end
class Cart < ActiveRecord::Base
belongs_to :user
belongs_to :item
validates_uniqueness_of :user, scope: :item
end
내 컨트롤러 :
지금까지이 내 모델입니다
class ItemsController < ApplicationController
before_action :set_item, only: [:show, :edit, :update, :destroy]
respond_to :html, :json, :js
def index
@items = Item.where(availability: true)
end
def show
end
def new
@item = Item.new
end
def edit
end
def create
@item = Item.new(item_params)
@item.save
respond_with(@item)
end
def update
@item.update(item_params)
flash[:notice] = 'Item was successfully updated.'
respond_with(@item)
end
def destroy
@item.destroy
redirect_to items_url, notice: 'Item was successfully destroyed.'
end
private
def set_item
@item = Item.find(params[:id])
end
def item_params
params.require(:item).permit(:name, :description, :availability)
end
end
내 카트 컨트롤러 :
class CartController < ApplicationController
before_action :authenticate_user!, except: [:index]
def add
id = params[:id]
if session[:cart] then
cart = session[:cart]
else
session[:cart] = {}
cart = session[:cart]
end
if cart[id] then
cart[id] = cart[id] + 1
else
cart[id] = 1
end
redirect_to :action => :index
end
def clearCart
session[:cart] = nil
redirect_to :action => :index
end
def index
if session[:cart] then
@cart = session[:cart]
else
@cart = {}
end
end
end
그리고 인증을 위해 고안를 사용하고 있습니다 ..
카트가 속한 것이 이상합니다. 항목 : 그렇지 않습니까? 사용자가 카트를 하나 가지고 있고 장바구니가 단 하나의 항목에 연결되어 있습니다. 따라서 사용자는 하나의 항목 만 가질 수 있습니다. 맞습니까? 현재 여러 항목을 단일 사용자에게 연결하는 방법은 무엇입니까? –
그런데 제품의 ID를 명시 적 컬럼 안에 사용자 모델에 저장하여 원하는 것을 설명하십시오. 사용자가 장바구니를 통해 항목간에 정상적으로 (관계형) 연결하는 것 외에 사용자 테이블에 항목 ID의 "캐시"가있는 저장소를 "비정규 화"하시겠습니까? 또는이 방법을 사용하여 사용자와 제품 간 연결을 만들고 싶습니다 (즉, 사용자에서 항목까지는 다른 방법이 없지만이 열을 통해서만 가능함). 어쨌든, 당신의 건물은 무엇보다 비표준이며, 첫눈에 비효율적 인 연결 방법이 무엇인지, 왜 당신이 그것을 만들고 있는지 설명하십시오. –
@PavelBulanov 잘못된 접근 일 수 있습니다. 기본적으로 나는 그 제품을 선적하기 위해 사용자가 선택한 제품을 알아야합니다. 그것들은 연관되어있는 어떤 방법이 될 수 있지만 병합 된 사용자 ID와 항목 ID를 알아야합니다. 이 데이터를 가져와야합니다. –