Я строю рынок, когда пользователь может покупать и продавать.Конечно, он не сможет покупать свои собственные продукты, и как только один из его продуктов будет куплен, за ним будет стоять контроллер количественной логики.Тем не мение.Я все еще застрял в моделировании схемы.
В настоящее время я использую эту схему.
ActiveRecord::Schema.define(version: 2018_09_11_202223) do
create_table "categories", force: :cascade do |t|
t.string "name"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
end
create_table "orders", force: :cascade do |t|
t.integer "user_id"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
t.index ["user_id"], name: "index_orders_on_user_id"
end
create_table "orders_products", id: false, force: :cascade do |t|
t.integer "order_id", null: false
t.integer "product_id", null: false
t.index ["order_id", "product_id"], name: "index_orders_products_on_order_id_and_product_id"
t.index ["product_id", "order_id"], name: "index_orders_products_on_product_id_and_order_id"
end
create_table "products", force: :cascade do |t|
t.string "name"
t.string "tagline"
t.integer "user_id"
t.integer "category_id"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
t.integer "price"
t.text "description"
t.index ["category_id"], name: "index_products_on_category_id"
t.index ["user_id"], name: "index_products_on_user_id"
end
create_table "users", force: :cascade do |t|
t.string "email", default: "", null: false
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.string "current_sign_in_ip"
t.string "last_sign_in_ip"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
t.index ["email"], name: "index_users_on_email", unique: true
t.index ["reset_password_token"], name: "index_users_on_reset_password_token", unique: true
end
end
С этими моделями:
class Category < ApplicationRecord
has_many :products
end
class Order < ApplicationRecord
has_and_belongs_to_many :products
belongs_to :user
end
class Product < ApplicationRecord
has_and_belongs_to_many :orders
belongs_to :category
belongs_to :user
end
class User < ApplicationRecord
# Include default devise modules. Others available are:
# :confirmable, :lockable, :timeoutable, :trackable and :omniauthable
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :validatable
has_many :orders, :dependent => :destroy
has_many :products, :dependent => :destroy
end
Так что в основномя собираюсь использовать HABTOM (has_and_belongs_to_many) ассоциации между таблицей Orders и Products, как вы можете видеть в моих моделях, потому что в заказе может быть много продуктов, а продукт может быть во многих заказах (здесь я не уверен, xD,я думаю, что я не прав).Во всяком случае, моя дилемма заключается в следующем, так как я читал в Интернете, что в большинстве случаев в таких ситуациях вы можете использовать has_many: through association (HMTA), что-то вроде этого:
class Category < ApplicationRecord
has_many :products
end
class User
has_many :orders
has_many :products, through: :orders
end
class Order
belongs_to :user
belongs_to :product
end
class Product
belongs_to :category
has_many :orders
has_many :users, through: :orders
end
помните, что на моем рынке я хочу, чтобы люди могли как покупать, так и продавать, поэтому у пользователя может быть много продуктов, но продукт должен быть уникальным и принадлежать только одному конкретному пользователю , например,старая машина, не существует двух абсолютно идентичных машин, поэтому я использовал эту ассоциацию в своей модели Продукта:
class Product < ApplicationRecord
has_and_belongs_to_many :orders
belongs_to :category
belongs_to :user
end
Итак, в конце концов, что вы предлагаете мне сделать?я должен переключиться с ассоциации HABTOM на HMTA?В этом случае, скажем, я хочу продать продукт, как я могу управлять ассоциацией пользователей и продуктов?Можно ли просто использовать has_many: через ассоциацию?Спасибо