在我的网上商店中,有表格产品和尺寸,我还想添加表格进货
我认为最好是使用进货表来代替更新产品,然后我才能跟踪添加任何新尺寸,数量以及为什么不添加新价格(买卖)的日期。 )...并创建统计信息...
这是正确的吗?
一旦创建了补货,相应的产品会更新为新的数量和价格吗?
好吧
所以它是这样开始的:
#Product
has_many :sizes
accepts_nested_attributes_for :sizes, reject_if: :all_blank, allow_destroy: true
#Size
belongs_to :product
进货表需要具有尺寸属性(如产品)
我相信我必须使用多态关联,但是应该如何更新我的架构,应该添加,删除哪些内容?
因此,由于我添加了进货模型,所以我的模型如下所示:
#Product
has_many :sizes, inverse_of: :product, dependent: :destroy, as: :sizeable
has_many :restockings
accepts_nested_attributes_for :sizes, reject_if: :all_blank, allow_destroy: true
#Restocking
has_many :sizes, as: :sizeable
belongs_to :product
accepts_nested_attributes_for :sizes, reject_if: :all_blank, allow_destroy: true
#Size
belongs_to :product
belongs_to :restocking
belongs_to :sizeable, polymorphic: true, class_name: "Size"
schema.rb
create_table "sizes", force: :cascade do |t|
t.string "size_name"
t.integer "quantity"
t.bigint "product_id"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
t.integer "quantity_stock"
t.index ["product_id"], name: "index_sizes_on_product_id"
end
create_table "restockings", force: :cascade do |t|
t.bigint "product_id"
t.bigint "sizeable_id"
t.decimal "price", precision: 10, scale: 2
t.decimal "buying_price", precision: 10, scale: 2
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
t.index ["product_id"], name: "index_restockings_on_product_id"
t.index ["sizeable_id"], name: "index_restockings_on_sizeable_id"
end
create_table "products", force: :cascade do |t|
t.string "title", limit: 150, null: false
t.text "description"
t.bigint "category_id"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
t.string "color"
t.integer "user_id"
t.json "attachments"
t.string "brand"
t.string "ref"
t.decimal "price"
t.decimal "buying_price", precision: 10, scale: 2
t.index ["category_id"], name: "index_products_on_category_id"
end
目前,我有几个错误,例如
在ProductsController中
def new
@product = Product.new
@product.sizes.build
end
错误:
ActiveModel::UnknownAttributeError at /admin/products/new
unknown attribute 'sizeable_id' for Size.
您能告诉我我必须更改的迁移吗? 欢迎提出建议
答案 0 :(得分:4)
您快到了,要在Size
模型中使用多态,您必须更改 size资源,并向资源添加两个属性:sizeable_id
和sizeable_type
。
sizeable_type
是一个字符串,表示父元素的类,在您的情况下可以是Product
或Restocking
,而sizeable_id
表示{{1 }}要找到父元素,您的关系是正确的,但是必须将此元素添加到element_id
中,请参见以下内容:
迁移到您的案例的一个例子:
Size
在您的class AddSizeableToSize < ActiveRecord::Migration
def change
add_reference :sizes, :sizeable, polymorphic: true, index: true
end
end
模型上:
Size
在您的# app/models/size.rb
class Size < ActiveRecord::Base
belongs_to :sizeable, polymorphic: true
end
或Product
模型中:
Restocking
这只是使案件生效的一种简单方法!如果您想了解有关Rails关联和多态的更多信息,请查看此link。