0

我有一个嵌套表单,它采用“品牌”“模型”“子模型”和“样式”......现在,任何给定的品牌+模型+子模型组合都有多种样式..但我不想重新保存我的数据库中有两次相同的品牌名称(或型号或子型号)..

因此,鉴于上述情况,我需要在我的控制器中的 CREATE 操作中执行什么操作以确保数据库中的品牌名称是唯一的……等等……但是仍然可以提交嵌套表单?

此外,如果子模型表中已经列出了一个(具有相同子模型名称)的子模型 ID,则保存的“样式”需要采用现有子模型对象的子模型 ID。

更新:

在此处输入图像描述

我想允许我的嵌套表单保存 xy 和 z,并具有以下内容:

Panasonic(未保存,但读取 ID 并与 model x 作为brand_id 保存) X(与 Panasonic 的brand_id 保存) Y(与 model X 的 model_id 保存) Z(与 Y 的 submodel_id 保存)

当然,如果 Model X 已经存在,那么我想要

Panasonic(未保存) X(未保存) Y(以 X 的 ID 作为 model_id 保存) Z(以 Y 的新 ID 作为 submodel_id 保存)

你明白我要去哪里了吗?=)

4

2 回答 2

0

如果我正确理解了您的问题,那么您的产品模型具有品牌、模型(应该命名为其他名称)、子模型、样式等属性。我会通过创建以下模型来做到这一点:

class Brand < ActiveRecord::Base
  has_many :products
end

class Primodel < ActiveRecord::Base
  has_many :products
  has_many :submodels
end

class Submodel < ActiveRecord::Base
  has_many :products
end

class Style < ActiveRecord::Base
  has_many :products
end

class ProductsStyles < ActiveRecord::Base
  belongs_to :product
  belongs_to :style
end

class Product < ActiveRecord::Base
  belongs_to :primodel
  belongs_to :submodel
  belongs_to :brand
  has_many :products_styles
  has_many :styles, :through => :products_styles
end

这应该允许您创建和重复使用品牌、模型、子模型和样式。它会将每个产品限制为仅具有前三个中的一个,但允许您拥有多种样式。

于 2012-04-07T22:02:56.383 回答
0

这是我需要做的:

@brand1 = params[:brand][:name]
@model = params[:brand][:models_attributes]["0"]["name"]
@submodel = params[:brand][:models_attributes]["0"]["submodels_attributes"]["0"]["name"]
@style = params[:brand][:models_attributes]["0"]["submodels_attributes"]["0"]["styles_attributes"]["0"]["name"]

a = Brand.find_or_create_by_name(@brand1)
b = Model.find_or_create_by_name(@model, :brand_id => a.id)
c = Submodel.find_or_create_by_name(@submodel, :model_id => b.id)
d = Style.new(:name => @style, :submodel_id => c.id)
d.save
于 2012-04-08T09:35:46.567 回答