我正在尝试在rails上的ruby中实现购物清单。我在数据库中创建了两个表,products
和shopping_list
。我已经为product_list提供了产品的外键引用product.shopping_list_id
。
我正在尝试在轨道上的红宝石中找到total products
中的shopping list
但我收到错误。
我的创建商店架构如下: -
class CreateShopSchema < ActiveRecord::Migration
def up
# --------------------
# Table Name: shopping_list
# --------------------
# Note: This is the base table that has details about an account.
# ---------------------------------------------------------------
create_table :shopping_lists do |t|
t.string :id, :null => false
t.string :shopping_list_name
t.string :shopping_list_status, :default => 'OPEN'
t.string :total_items, :default => 0
t.timestamps
end
# --------------------
# Table Name: products
# --------------------
# Note: This is the base table that has details about an account.
# ---------------------------------------------------------------
create_table :products do |t|
t.references :shopping_list, :null => false
t.string :product_name, :default => 'null'
t.string :product_category
t.integer :quantity
t.string :status, :default => 'OPEN'
end
end
def down
drop_table :products
drop_table :shopping_lists
end
end
我的shopping_list表格如下: -
CREATE TABLE shopping_lists
(
id serial NOT NULL,
shopping_list_name character varying(255),
shopping_list_status character varying(255) DEFAULT 'OPEN'::character varying,
total_items character varying(255) DEFAULT 0,
created_at timestamp without time zone NOT NULL,
updated_at timestamp without time zone NOT NULL,
deleted integer NOT NULL DEFAULT 0,
CONSTRAINT shopping_lists_pkey PRIMARY KEY (id)
)
我的产品表如下: -
CREATE TABLE products
(
id serial NOT NULL,
shopping_list_id integer NOT NULL,
product_name character varying(255) DEFAULT 'null'::character varying,
product_category character varying(255),
quantity integer,
status character varying(255) DEFAULT 'OPEN'::character varying,
deleted integer NOT NULL DEFAULT 0,
CONSTRAINT products_pkey PRIMARY KEY (id)
)
我的产品控制器如下: -
class ProductsController < ApplicationController
# GET /products
# GET /products.json
def index
@products = Product.all
# @products = Product.includes(:shopping_list_id)
respond_to do |format|
format.html # index.html.erb
format.json { render json: @products }
end
end
# GET /products/1
# GET /products/1.json
def show
@product = Product.find(params[:id])
#product = Product.includes(:shopping_list_id)
#@product = Product.joins(:shopping_list_id)
respond_to do |format|
format.html # show.html.erb
format.json { render json: @product }
end
end
# GET /products/new
# GET /products/new.json
def new
@product = Product.new
respond_to do |format|
format.html # new.html.erb
format.json { render json: @product }
end
end
# GET /products/1/edit
def edit
@product = Product.find(params[:id])
end
# POST /products
# POST /products.json
def create
@product = Product.new(params[:product])
respond_to do |format|
if @product.save
format.html { redirect_to @product, notice: 'Product was successfully created.' }
format.json { render json: @product, status: :created, location: @product }
else
format.html { render action: "new" }
format.json { render json: @product.errors, status: :unprocessable_entity }
end
end
end
# PUT /products/1
# PUT /products/1.json
def update
@product = Product.find(params[:id])
respond_to do |format|
if @product.update_attributes(params[:product])
format.html { redirect_to @product, notice: 'Product was successfully updated.' }
format.json { head :no_content }
else
format.html { render action: "edit" }
format.json { render json: @product.errors, status: :unprocessable_entity }
end
end
end
# DELETE /products/1
# DELETE /products/1.json
def delete
@product = Product.find(params[:id])
@product.deleted = 1
@product.save
respond_to do |format|
format.html { redirect_to products_url }
format.json { render :json => { :success => true } }
end
end
def list
@products = Product.find(:all,
:order => "id asc")
# @products = Product.includes(:shopping_list_id)
respond_to do |format|
format.html { render :action => 'list' }
format.json { render :json => @accounts.to_json }
end
end
end
当我尝试通过前端在数据库中添加新产品时,将填充产品表,但shopping_list中的数量(总项数)未在数据库中更新。
我想以这样的方式实施,以便我可以获得特定购物清单的产品数量
任何人都可以帮我实现这个
答案 0 :(得分:1)
好的,为什么不考虑将应用程序设置为以下内容:
<强> Product.rb 强>
belongs_to :category
belongs_to :shopping_list
def total_price
product.price * quantity
end
Category.rb
has_many :products
Line_item
belongs_to :product
belongs_to :shopping_list
belongs_to :order --> will let you finish the rest
<强> shopping_list.rb 强>
has_many :line_items
您的订单表将包含quantity
。要获得订单中的quantity
,您可以执行以下操作:
def quantity
line_items.to_a.sum { |quant| quant.quantity }
end
将上述内容放入您的产品型号中意味着您可以使用product/index.html.erb
- &gt; <%= order.quantity %>