Rails has_many :通过未初始化常量
Rails has_many :through Uninitialized constant
我正在寻求帮助来调试 Rails has_many :through 关联的问题。我有 3 个模型,Package,Venue,我加入 table,Packagevenue
package.rb
class Package < ActiveRecord::Base
has_many :packagevenues
has_many :venues, through: :packagevenues
end
venue.rb
class Venue < ActiveRecord::Base
has_many :packagevenues
has_many :packages, through: :packagevenues
end
包venue.rb
class Packagevenue < ActiveRecord::Base
belongs_to :venues
belongs_to :packages
end
packagevenues 架构 table
create_table "packagevenues", force: :cascade do |t|
t.integer "package_id"
t.integer "venue_id"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
end
测试用例:
Packagevenue.first
Packagevenue Load (0.3ms) SELECT "packagevenues".* FROM "packagevenues" ORDER BY "packagevenues"."id" ASC LIMIT 1
=> #<Packagevenue:0x007fac12209750> {
:id => 1,
:package_id => 2,
:venue_id => 1,
.....
}
[11] webapp » p=Package.find(2)
Package Load (0.2ms) SELECT "packages".* FROM "packages" WHERE "packages"."id" = LIMIT 1 [["id", 2]]
=> #<Package:0x007fac14eae738> {
:id => 2,
.....
}
[12] webapp » v=Venue.find(1)
Venue Load (0.2ms) SELECT "venues".* FROM "venues" WHERE "venues"."id" = LIMIT 1 [["id", 1]]
=> #<Venue:0x007fac1222e488> {
:id => 1,
.....
}
[13] webapp » v.packages
NameError: uninitialized constant Venue::Packages
.....
[14] webapp » p.venues
NameError: uninitialized constant Package::Venues
.....
我认为我正确地完成了所有设置,有人可以告诉我为什么不断弹出未初始化常量错误吗?
可能的原因是您的 Packagevenue
模型中有多个 belongs_to
符号。你希望它们像这样是单数的:
class Packagevenue < ActiveRecord::Base
belongs_to :venue
belongs_to :package
end
我正在寻求帮助来调试 Rails has_many :through 关联的问题。我有 3 个模型,Package,Venue,我加入 table,Packagevenue
package.rb
class Package < ActiveRecord::Base
has_many :packagevenues
has_many :venues, through: :packagevenues
end
venue.rb
class Venue < ActiveRecord::Base
has_many :packagevenues
has_many :packages, through: :packagevenues
end
包venue.rb
class Packagevenue < ActiveRecord::Base
belongs_to :venues
belongs_to :packages
end
packagevenues 架构 table
create_table "packagevenues", force: :cascade do |t|
t.integer "package_id"
t.integer "venue_id"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
end
测试用例:
Packagevenue.first
Packagevenue Load (0.3ms) SELECT "packagevenues".* FROM "packagevenues" ORDER BY "packagevenues"."id" ASC LIMIT 1
=> #<Packagevenue:0x007fac12209750> {
:id => 1,
:package_id => 2,
:venue_id => 1,
.....
}
[11] webapp » p=Package.find(2)
Package Load (0.2ms) SELECT "packages".* FROM "packages" WHERE "packages"."id" = LIMIT 1 [["id", 2]]
=> #<Package:0x007fac14eae738> {
:id => 2,
.....
}
[12] webapp » v=Venue.find(1)
Venue Load (0.2ms) SELECT "venues".* FROM "venues" WHERE "venues"."id" = LIMIT 1 [["id", 1]]
=> #<Venue:0x007fac1222e488> {
:id => 1,
.....
}
[13] webapp » v.packages
NameError: uninitialized constant Venue::Packages
.....
[14] webapp » p.venues
NameError: uninitialized constant Package::Venues
.....
我认为我正确地完成了所有设置,有人可以告诉我为什么不断弹出未初始化常量错误吗?
可能的原因是您的 Packagevenue
模型中有多个 belongs_to
符号。你希望它们像这样是单数的:
class Packagevenue < ActiveRecord::Base
belongs_to :venue
belongs_to :package
end