我需要在我的“教师”模型和我的“机器人”模型之间建立一对多的关系。每位老师都有很多机器人,但每个机器人只有一位老师。
我以为我已经正确设置但是当我尝试在rails控制台中使用它时输入:
teacher1.robots = [robot1, robot2]
其中teacher1是有效的教师,robot1和robot2都是有效的机器人,产生此错误:
SQLite3::SQLException: no such column: robots.teacher_id: SELECT "robots".* FROM "robots" WHERE "robots"."teacher_id" = 14
ActiveRecord::StatementInvalid: SQLite3::SQLException: no such column: robots.teacher_id: SELECT "robots".* FROM "robots" WHERE "robots"."teacher_id" = 14
我是Ruby(以及Ruby on Rails)的新手,但在我所做的所有研究中,我发现我的模型或迁移的方式都没有发现任何错误......以下是两个模型文件和迁移。
* _ create_robots.rb:
class CreateRobots < ActiveRecord::Migration
def up
create_table 'robots' do |t|
t.text 'serial'
t.references 'teachers'
end
end
def down ; drop_table 'robots' ; end
end
robot.rb:
class Robot < ActiveRecord::Base
belongs_to :teacher
end
teacher.rb:
class Teacher < ActiveRecord::Base
has_many :robots
before_destroy :confirm_no_inventory
protected
def confirm_no_inventory
unless self.usb_cords == 0 and self.simple_snaps == 0 and self.casters == 0
errors.add(:base, "All checked out items must be returned before #{self.name} can be deleted")
return false
end
end
end
提前感谢任何花时间仔细阅读此内容的人,我们非常感谢您对问题的解决方法或如何解决问题。
答案 0 :(得分:2)
references
帮助程序必须与单数模型名称一起使用。您使用了复数teachers
,这导致了一个名为teachers_id
的列,Active Record无法找到该列。
回滚迁移,将其更改为显示以下内容并重新运行:
t.references 'teacher'