2016-12-01 7 views
0

協会を通じて:それは、このようなエラーが発生セット持って-1、私は私のcarts_controller.rbに工夫をCURRENT_USERでカートオブジェクトをバインドするために努力

class CartsController < ApplicationController 
    def show 
    @cart = Cart.find_or_create_by(user_id: current_user.id) 
    @products = @cart.products 
    end 
end 

ActiveRecord::StatementInvalid (PG::UndefinedColumn: ERROR: column carts.user_id does not exist 
LINE 1: SELECT "carts".* FROM "carts" WHERE "carts"."user_id" = $1 ... 
              ^
: SELECT "carts".* FROM "carts" WHERE "carts"."user_id" = $1 LIMIT $2): 

それは `sの予測可能な結果を​​、理由私のカート・モデル:

class Cart < ApplicationRecord 
    belongs_to(:account, optional: true) 
    has_and_belongs_to_many(:products) 
end 

は1つのアカウントを通じてユーザーとの関連付けがあります。

class User < ApplicationRecord 
# Include default devise modules. Others available are: 
# :confirmable, :lockable, :timeoutable and :omniauthable 
    devise :database_authenticatable, :registerable, 
     :recoverable, :rememberable, :trackable, :validatable 
    has_one(:cart, through: :account) 
    has_one(:account) 
end 

私schema.rbつまり:対応する口座を経由して

ActiveRecord::Schema.define(version: 20161201120324) do 

    # These are extensions that must be enabled in order to support this database 
    enable_extension "plpgsql" 

    create_table "accounts", force: :cascade do |t| 
    t.datetime "created_at", null: false 
    t.datetime "updated_at", null: false 
    t.integer "user_id" 
    t.float "balance" 
    t.index ["user_id"], name: "index_accounts_on_user_id", using: :btree 
    end 

    create_table "carts", force: :cascade do |t| 
    t.datetime "created_at", null: false 
    t.datetime "updated_at", null: false 
    t.integer "account_id" 
    t.index ["account_id"], name: "index_carts_on_account_id", using:  :btree 
    end 

    create_table "users", force: :cascade do |t| 
    t.string "name" 
    t.integer "age" 
    t.datetime "created_at",       null: false 
    t.datetime "updated_at",       null: false 
    t.string "email" 
    t.string "encrypted_password",  default: "", null: false 
    t.string "reset_password_token" 
    t.datetime "reset_password_sent_at" 
    t.datetime "remember_created_at" 
    t.integer "sign_in_count",   default: 0, null: false 
    t.datetime "current_sign_in_at" 
    t.datetime "last_sign_in_at" 
    t.inet  "current_sign_in_ip" 
    t.inet  "last_sign_in_ip" 
    t.index ["reset_password_token"], name: "index_users_on_reset_password_token", unique: true, using: :btree 
    end 

    add_foreign_key "accounts", "users" 
    add_foreign_key "carts", "accounts" 
end 

は、私はちょうど私のカートテーブルに参照のuser_idフィールドを追加することにより、CURRENT_USERを参照することができるか、それがneccessarilyていますか?

答えて

1

あなたはCartにカートとの関連にuser_idを追加する必要があります。

belongs_to :user

、その後、あなたがコントローラでやろうとしているものが動作するはずです。

関連する問題