gpt4 book ai didi

ruby-on-rails - Rails 3 - has_and_belongs_to_many

转载 作者:太空宇宙 更新时间:2023-11-03 17:58:03 24 4
gpt4 key购买 nike

我有 2 个模型 - TeacherSubject。 A 想通过名称为 Qualification 的 Join 表将它们连接起来。

看来我做错了什么:

class Teacher < ActiveRecord::Base
has_and_belongs_to_many :subjects, :join_table => "Qualification"
end

class Subject < ActiveRecord::Base
has_and_belongs_to_many :teachers, :join_table => "Qualification"
end

我的迁移:

class CreateQualificationJoinTable < ActiveRecord::Migration
def change
create_table :qualification, :id => false do |t|
t.integer :subject_id
t.integer :teacher_id
end
add_index :qualification, :subject_id
add_index :qualification, :teacher_id
end
end

例如,当我打开 Rails 控制台并打印时

ruby-1.9.3-head :013 > Qualification

我明白了:

NameError: uninitialized constant Qualification
from (irb):13
from /Users/serg/.rvm/gems/ruby-1.9.3-head/gems/railties-3.2.0/lib/rails/commands/console.rb:47:in `start'
from /Users/serg/.rvm/gems/ruby-1.9.3-head/gems/railties-3.2.0/lib/rails/commands/console.rb:8:in `start'
from /Users/serg/.rvm/gems/ruby-1.9.3-head/gems/railties-3.2.0/lib/rails/commands.rb:41:in `<top (required)>'
from script/rails:6:in `require'
from script/rails:6:in `<main>'

怎么了?

最佳答案

首先,在迁移中创建表并没有定义您的模型。您必须在 app/models/qualification.rb 中创建一个 Qualification 模型:

class Qualification < ActiveRecord::Base
belongs_to :subjects
belongs_to :teachers
end

其次,如果您使用的是 Rails 3,请放弃 has_and_belongs_to_many 并使用 has_many :through:

class Teacher < ActiveRecord::Base
has_many :qualifications
has_many :subjects, :through => :qualifications
end

class Subject < ActiveRecord::Base
has_many :qualifications
has_many :teachers, :through => :qualifications
end

关于ruby-on-rails - Rails 3 - has_and_belongs_to_many,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9944542/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com