1

ruby on rails でショッピング リストを実装しようとしています。データベースに 2 つのテーブルを作成しましproductsshopping_list。私は製品に shopping_list の外部キー参照を与えましたproduct.shopping_list_id

ruby on rails でtotal products現在を見つけようとしていますが、エラーが発生します。shopping list

私の create Shop スキーマは次のとおりです:-

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 の数量 (合計アイテム) がデータベースで更新されません。

特定の買い物リストの商品の数を取得できるように実装したい

誰でもこれを実装するのを手伝ってくれますか

4

1 に答える 1

1

アプリケーションを次のように設定することを検討してみませんか。

製品.rb

belongs_to :category 
belongs_to :shopping_list


def total_price
    product.price * quantity
  end

カテゴリー.rb

has_many :products

ラインアイテム

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-->で実行できるようになります<%= order.quantity %>

于 2013-02-26T05:40:18.850 に答える