Ruby on Rails 5.0中的has_many关系

时间:2016-07-25 22:50:39

标签: ruby-on-rails ruby ruby-on-rails-5

我的Rails应用程序中存在问题,我一直在苦苦挣扎一段时间。我有三个类,商品 MerchandiseCategory MerchandiseMerchandiseCategory 。 MerchandiseMerchandiseCategory用于创建其他两个之间的多对多关系。

当我在Rails控制台中运行以下命令时,我得到了相应的结果:

m = MerchandiseMerchandiseCategory.first
# Returns an object that relates the first Merchandise
# with the first Merchandise Category

m.merchandise_category
# Returns the corresponding merchandise_category

m.merchandise_category.merchandise_merchandise_categories.first
# Returns an array of all corresponding MerchandiseMerchandiseCategy ids

m.merchandise
# Returns the corresponding merchandise

m.merchandise.merchandise_merchandise_categories.first
# LoadError: Unable to autoload constant
# Merchandise::MerchandiseMerchandiseCategory, expected
# /home/bjarki/Development/h2/app/models/merchandise/merchandise_merchandise_category.rb
# to define it

因此,除了Merchandise和MerchandiseMerchandiseCategory之间的一对多关系外,所有关系都有效。我已经尝试了我能想到的一切,包括删除商品模型并重新创建它。

这些是我正在使用的课程

merchandise.rb

# branch_id: uuid
# name: string
# price: integer
class Merchandise < ApplicationRecord
  has_many :merchandise_merchandise_categories
  has_many :categories, class_name: :MerchandiseCategory,
                        through: :merchandise_merchandise_categories
  belongs_to :branch
end

merchandise_category.rb

# branch_id: uuid
# name : string
class MerchandiseCategory < ApplicationRecord
  has_many :merchandise_merchandise_categories
  has_many :merchandises, through: :merchandise_merchandise_categories
  belongs_to :branch
end

merchandise_merchandise_category.rb

# merchandise_id: uuid
# merchandise_category_id: uuid
class MerchandiseMerchandiseCategory < ApplicationRecord
  belongs_to :merchandise
  belongs_to :merchandise_category
end

这让我在最后几天疯狂。如果有人能指出我正确的方向,我将非常感激。

2 个答案:

答案 0 :(得分:0)

  

中的merchandise_merchandise_category.rb      

应用程序/模型/商品/ merchandise_merchandise_category.rb

让我知道

答案 1 :(得分:0)

我终于知道发生了什么,这是我文件的位置。

我的应用程序包含相当多的模型,所以我决定为我的应用程序的不同组件创建几个目录。

我放置这三个文件的目录名称为商品,显然是不允许的。我重命名目录为 merchandise_component ,一切正常。

如果有人可以解释为什么我不允许该目录具有该名称,请在下面发表评论: - )