has_many Ruby 关系 Rails 5.0

has_many relations in Ruby on Rails 5.0

我的 Rails 应用程序出现问题,我已经为此苦苦挣扎了一段时间。我有三个 类、MerchandiseMerchandiseCategoryMerchandiseMerchandiseCategory。 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_category.rb

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

最近几天这让我发疯。如果有人能指出正确的方向,我将不胜感激。

merchandise_merchandise_category.rb in

app/models/merchandise/merchandise_merchandise_category.rb

告诉我

我终于知道是怎么回事了,就是我的文件所在的位置。

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

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

如果有人能解释为什么我不能让那个目录有那个名字,请在下面评论:-)