Ruby on rails 使用模型名的别名与ActiveRecord建立一对多关联

Ruby on rails 使用模型名的别名与ActiveRecord建立一对多关联,ruby-on-rails,ruby,activerecord,Ruby On Rails,Ruby,Activerecord,我正在建立一个音乐家社交网站。用户可以创建乐队,从那时起他们就被视为乐队的管理者。我想将用户的一个实例称为管理器 尽管在模型中指定了关系,并指定了class_name:User和foreign_key:manager,但该应用程序不会将新波段保存到数据库中 user.rb 种子.rb 编辑种子.rb 我运行railsdb:seed,希望在控制台中看到“Done”。 我得到“不完整” 在rails控制台中测试时,band实例出现错误Manager必须存在 此外,还存在一个用户实例,其名称和id为1

我正在建立一个音乐家社交网站。用户可以创建乐队,从那时起他们就被视为乐队的管理者。我想将用户的一个实例称为管理器

尽管在模型中指定了关系,并指定了class_name:User和foreign_key:manager,但该应用程序不会将新波段保存到数据库中

user.rb 种子.rb 编辑种子.rb 我运行railsdb:seed,希望在控制台中看到“Done”。 我得到“不完整”

在rails控制台中测试时,band实例出现错误Manager必须存在


此外,还存在一个用户实例,其名称和id为1。

更新关联,如下所示:

band.rb

belongs_to :manager, class_name: 'User', foreign_key: 'manager_id'
belongs_to :manager, class_name: 'User', foreign_key: 'manager_id'
user.rb

has_many :bands, foreign_key: 'manager_id'
has_many :bands, foreign_key: 'manager_id'
在创建频带之前,管理器应该出现在用户表中

manager = User.find(1)
band = manager.bands.new(name: "Jams", description: "Hey, its our first band.") 
if band.save
   puts "Done"
else
   puts "Incomplete"
end
band.rb

belongs_to :manager, class_name: 'User', foreign_key: 'manager_id'
belongs_to :manager, class_name: 'User', foreign_key: 'manager_id'
user.rb

has_many :bands, foreign_key: 'manager_id'
has_many :bands, foreign_key: 'manager_id'
要测试,请尝试以下操作:

manager = User.create(...user_information)
jms = Band.new(name: "Jams", description: "Hey, its our first band.")
jms.manager = manager
jms.save

如果失败,jms.errors的输出是什么?

好的,所以我更改了迁移文件,这显然是导致问题的原因。schema.rb看起来相同,但seeds.rb现在是

模型 user.rb 有很多:乐队,外键:“经理id”

band.rb 属于:管理者,类名:'User',外键:'manager\u id'

种子.rb 错误为:ActiveRecord::StatementInvalid:SQLite3::SQLException:没有这样的表:main.managers:INSERT INTO bands name、description、manager\u id、created\u at、Update\u at VALUES?、?、?、

已更改带区的迁移文件 先前 改为 删除选项,外键:true,删除数据库,运行迁移,现在


它有效…已经试过了,不会起作用。接收错误。ActiveRecord::StatementInvalid:SQLite3::SQLException:没有这样的表:main.managers:插入到带区名称、描述、管理器id、已创建的、已更新的值?、?、?、?,?manager=User.find1…这将返回manager,然后创建品牌manager.bands.newname:“我的乐队”你说User=User.find1应该去哪里?替换为新的查询:jms=band.newname:Jams,描述:嘿,这是我们的第一个乐队。,manager_id:1如果您的应用程序正在加载,请重置数据库并再次运行迁移和种子。也许这会有帮助。谢谢基思。得到如下错误。ActiveRecord::StatementInvalid SQLite3::SQLException:没有这样的表:main.managers:插入到标注栏名称、说明、创建的位置、更新的位置值?、?、?、?
User.destroy_all
Band.destroy_all

user = User.new(name: 'John', username: "johnny", password: "nice")
user.save
user = User.find_by_name('John')

user_band = Band.new(name: 'Band #1', description: 'My first band', manager_id: user.id)

if user_band.save
    puts "Done"
else
    puts "Incomplete"
end
create_table :bands do |t|
    t.belongs_to :manager, foreign_key: true
    t.string :name
    t.text :description
    t.timestamps
end
create_table :bands do |t|
    t.belongs_to :manager
    t.string :name
    t.text :description
    t.timestamps
end