Rails产品目录

时间:2015-10-25 16:22:34

标签: ruby-on-rails database-design

noob问题:)

我正在尝试使用gems devise和shoppe在rails 4中设置产品目录。专柜产品和类别管理。在这里查看http://tryshoppe.com/

要求:

用户应该能够创建产品目录。 一个用户有许多目录,一个目录有一个用户。 一个目录有很多产品,产品上有很多目录

型号规格

这是我在Shoppe Engine命名空间之外的模型。

用户

    template <typename K, typename T>
void MyBinaryTree<K, T>::addValue(K key, T value) {
    Node *node = new Node(key, value);
    addToSubtree(root, node);
}

目录

    template <typename K, typename T>
void MyBinaryTree<K, T>::addToSubtree(MyBinaryTree<K, T>::Node *node,
            MyBinaryTree<K, T>::Node *toAdd) {
    if(node == nullptr) {
        node = toAdd;
    } else {
        if(toAdd->key > node->key) addToSubtree(node->right, toAdd);
        else if(toAdd->key < node->key) addToSubtree(node->left, toAdd);
    }
}

产品

在Shoppe名称空间内,只显示相关部分。

class User < ActiveRecord::Base
  has_many :catalogs
  has_many :products, through: :catalogs
  attr_accessor :products
end

我正在尝试通过目录设置用户和产品之间的许多关联。但我不确定这是否是我需要的结果的正确方法。

也许我需要在目录和产品之间创建另一个连接表?

提前致谢。

1 个答案:

答案 0 :(得分:0)

我认为你不需要另一张联名表;只有多对多关系需要连接表。在一对多(产品到目录)关系中,ActiveRecord只在一个表(product_id表中的CATALOG)中记录id。通常在多对多(用户到目录)关系中,您需要一个连接表,但在您的情况下,CATALOG表实际上用作连接表,因为它具有product_iduser_id

在其他情况下,如果您不想创建Catalog课程,则可以致电has_and_belongs_to_many,然后产品和用户可以互相列出。但是,在这种情况下,您执行需要一个连接表。

查看official guide以获得更好的理解(以及良好的关系图)。

修改

似乎OP希望用户和目录之间存在一对多的关系,以及目录和产品之间的多对多关系。然后,需要在目录和产品之间建立连接表。

强烈建议您使用generator

创建迁移
bin/rails g migration CreateJoinTableCatalogProduct catalog product

因为它使用create_join_table创建了迁移,而不是提供信息量较少的create_table