has_many Ruby 关系 Rails 5.0
has_many relations in Ruby on Rails 5.0
我的 Rails 应用程序出现问题,我已经为此苦苦挣扎了一段时间。我有三个 类、Merchandise、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_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,一切正常。
如果有人能解释为什么我不能让那个目录有那个名字,请在下面评论:-)
我的 Rails 应用程序出现问题,我已经为此苦苦挣扎了一段时间。我有三个 类、Merchandise、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_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,一切正常。
如果有人能解释为什么我不能让那个目录有那个名字,请在下面评论:-)