So habe ich ein System von Produkten und einen Einkaufswagen in meiner App Rails gebaut. Das Ziel, das ich habe, besteht darin, dem Benutzermodell IDs der gespeicherten Produkte aus einem Einkaufswagen hinzuzufügen. Auf meiner Warenkorb-Seite gibt es eine Liste aller hinzugefügten Produkte in einem Einkaufswagen und ich möchte eine Speichern-Schaltfläche hinzufügen, die diese Produkte nach ihren IDs in den Spalten in der Benutzertabelle speichert. Wenn beispielsweise current_user drei Produkte im Einkaufswagen mit den IDs 1,2,3 und Klicks auf die Schaltfläche "Speichern" in einem Einkaufswagen anzeigt, möchte ich diese drei IDs durch Ganzzahlen in den drei Spalten speichern können: product_one, product_two , product_three des aktuellen Benutzers.So speichern Sie IDs in Benutzerspalten
Bisher das sind meine Modelle:
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
Meine Controller:
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
den Warenkorb Controller:
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
Und ich bin mit Devise für die Authentifizierung ..
Es ist seltsam, dass Ihr Einkaufswagen gehört to_to: item, nicht wahr? Bedeutet Benutzer hat einen Warenkorb, und Warenkorb ist verbunden (gehört zu) nur ein Element. Also wird der Benutzer nur einen Gegenstand haben, richtig? Wie stellen Sie sich derzeit vor, mehrere Elemente mit einem einzelnen Benutzer zu verbinden? –
Übrigens, erklären Sie, was Sie erreichen möchten, indem Sie IDs von Produkten im Benutzermodell in expliziten Spalten speichern. Möchten Sie den Speicher "denormalisieren", d. H. Einen "Cache" von Element-IDs in der Benutzertabelle zusätzlich zur normalen (relationalen) Verbindung vom Benutzer zum Artikel über den Einkaufswagen haben? Oder möchten Sie eine Verbindung zwischen Benutzer und Produkt herstellen, indem Sie diesen Ansatz verwenden (d. H. Sie haben keinen anderen Weg vom Benutzer zu den Elementen, sondern nur durch diese Spalten). Wie auch immer, als was ist Ihr Gebäude ist auf jeden Fall nicht-Standard-und auf den ersten Blick, sehr ineffiziente Art der Verbindung, bitte erklären, warum bauen Sie es. –
@PavelBulanov Es kann ein falscher Ansatz sein. Grundsätzlich muss ich wissen, welche Produkte der Benutzer ausgewählt hat, um diese Produkte zu versenden. Es kann jede Art sein, wie diese verknüpft sind, aber ich muss die kombinierte Benutzer-ID und Artikel-ID kennen. Ich brauche nur diese Daten. –