Ruby on rails Rails协会不工作

Ruby on rails Rails协会不工作,ruby-on-rails,ruby-on-rails-3,Ruby On Rails,Ruby On Rails 3,我甚至不知道从哪里开始解释我的问题,所以请容忍我:( 我有两个模型;产品和类别-产品有一个类别,类别属于产品 产品模型 id 名称 说明 品牌 商人 价格 图像 链接 类别 类别模型 id 名称 产品标识 现在我通过一个XML提要循环创建如下产品: Product.create(:name => node.xpath("./text/name/text()").inner_text.downcase, :description =&g

我甚至不知道从哪里开始解释我的问题,所以请容忍我:(

我有两个模型;产品和类别-产品有一个类别,类别属于产品

产品模型 id
名称
说明
品牌
商人
价格
图像
链接
类别


类别模型 id
名称
产品标识


现在我通过一个XML提要循环创建如下产品:

Product.create(:name => node.xpath("./text/name/text()").inner_text.downcase, 
               :description => node.xpath("./text/desc/text()").inner_text,
               :brand => node.xpath("./brand/text()").inner_text,
               :merchant => node.xpath("../@name").inner_text,
               :category => Category.find_by_name(node.xpath("./cat/text()").inner_text.downcase),
               :price => "£" + node.xpath("./price/btext()").inner_text)
这看起来运行得很好,直到我看到它在数据库中生成了什么…这是两个表的输出

产品表
(简略版,包含10000多条记录) id:1
..
..
..

类别:您的关系是反向的。如果您希望产品属于单一类别,则需要:

产品
属于:类别

类别

有很多:产品

您的关系是反向的。如果您希望某个产品属于单一类别,您需要:

产品
属于:类别

类别

有很多:产品

您需要做一些更改。首先,您的模型结构应该如下所示:

class Product belongs_to :category end class Category has_many :products end 类产品 属于:类别 结束 类别 有很多:产品 结束
其次,您的products表应该有一个category_id,而不是category,并且categories表应该根本没有product_id。然后,您的代码示例应该正常运行。

您需要进行一些更改。首先,您的模型结构应该如下所示:

class Product belongs_to :category end class Category has_many :products end 类产品 属于:类别 结束 类别 有很多:产品 结束
其次,您的products表应该有一个category\u id,而不是category,您的categories表也不应该有product\u id。然后,您的代码示例应该可以正常运行。

当您使用has\u one/Att归属时,只有一个模型包含另一个模型的id。在您的情况下,由于
category属于product
categories
表需要一个
product\u id
列,用于存储所属产品的id

但是如果
产品有一个类别
(这也适用于
有许多
),它不需要
类别id
列-Rails知道,要找到给定产品(p)的类别(c),它只需在
类别
表中查找产品id==p.id的类别

从您发布的代码来看,Rails似乎正在做它应该做的事情——即使关系可以从两个模型中访问,但只有具有
belient\u to
指令的模型在其表中存储了任何关系数据。事实上,Rails非常聪明,当您指定{:category=>cat}选项创建产品时,它实际上应该更改
类别
表-确实如此。这就是为什么您在
类别
表中看到
产品id
s,而在
产品
表中没有看到任何内容(而且,
products.category
列甚至不需要存在——没有它,关系就可以正常工作)

话虽如此,我怀疑一个产品应该能够属于多个类别,同样,一个类别应该能够包含多个产品。在这种情况下,您需要在两种模型中都使用,并创建联接表
categories\u products
来连接它们


希望这能把事情弄清楚!

当你使用has\u one/所属时,只有一个模型最终包含了另一个模型的id。在你的例子中,由于
类别属于产品
类别
表需要一个
产品id
列,它将存储它所属产品的id

但是如果
产品有一个类别
(这也适用于
有许多
),它不需要
类别id
列-Rails知道,要找到给定产品(p)的类别(c),它只需在
类别
表中查找产品id==p.id的类别

从您发布的代码来看,Rails似乎正在做它应该做的事情——即使关系可以从两个模型中访问,但只有具有
belient\u to
指令的模型在其表中存储了任何关系数据。事实上,Rails非常聪明,当您指定{:category=>cat}选项创建产品时,它实际上应该更改
类别
表-确实如此。这就是为什么您在
类别
表中看到
产品id
s,而在
产品
表中没有看到任何内容(而且,
products.category
列甚至不需要存在——没有它,关系就可以正常工作)

话虽如此,我怀疑一个产品应该能够属于多个类别,同样,一个类别应该能够包含多个产品。在这种情况下,您需要在两种模型中都使用,并创建联接表
categories\u products
来连接它们


希望这能解决问题!

这是你的另一个问题。你希望
有很多
产品,而不是
有一个
(除非确实存在类别->产品的1:1映射)好的。我收到你的评论,我刚刚尝试过,现在product.category和category.product\u id字段对于所有记录都是空的,这也不对。我需要在categories表中删除product\u id列并在products表中创建category\u id吗?换言之,将其反转。这是你的另一个问题。你想
有人吗y
products,而不是
有一个
(除非确实存在类别->产品的1:1映射)好的。我收到了您的评论,我刚刚尝试过,现在所有记录的product.category和category.product\u id字段都是空的,这也不对。我需要吗