我无法找出这种关系的错误:
class Education < ActiveRecord::Base
attr_accessible :description, :graduation, :student_id, :faculty_id, :department_id
has_one :faculty
belongs_to :student
end
# id :integer not null, primary key
# student_id :integer
# faculty_id :integer
# description :text
# graduation :string(255)
class Faculty < ActiveRecord::Base
attr_accessible :department_id, :name
belongs_to :education
belongs_to :department
end
# == Schema Information
#
# Table name: faculties
#
# id :integer not null, primary key
# name :string(255)
# department_id :integer
为什么我必须将education_id
添加到faculties
表?
每个教育只有一个教师和教师属于许多教育。
>> Education.last.faculty
Education Load (0.3ms) SELECT "educations".* FROM "educations" ORDER BY "educations"."id" DESC LIMIT 1
Faculty Load (0.2ms) SELECT "faculties".* FROM "faculties" WHERE "faculties"."education_id" = 1 LIMIT 1
SQLite3::SQLException: no such column: faculties.education_id: SELECT "faculties".* FROM "faculties" WHERE "faculties"."education_id" = 1 LIMIT 1
ActiveRecord::StatementInvalid: SQLite3::SQLException: no such column: faculties.education_id: SELECT "faculties".* FROM "faculties" WHERE "faculties"."education_id" = 1 LIMIT 1
from /Users/rege/.rvm/gems/ruby-1.9.3-p194@ckdatabase/gems/sqlite3-1.3.6/lib/sqlite3/database.rb:91:in `initialize'
答案 0 :(得分:2)
无论你把'belongs_to'放在哪一边,都会有一个相关对象的id - 根据定义,它就是一种。如果你属于某个你不属于另一个实例的东西。
如果您希望每个教育只有一个教师,有两种选择:
所以你可以试试这个:
class Education < ActiveRecord::Base
attr_accessible :description, :graduation, :student_id, :faculty_id, :department_id
belongs_to :faculty
belongs_to :student
end
class Faculty < ActiveRecord::Base
attr_accessible :department_id, :name
has_many :education
belongs_to :department
end
答案 1 :(得分:1)
我认为你的人际关系有些混乱 - official docs可能会有所帮助。
如果我理解你要做什么,你需要这样的事情(关于你的教师/教育关系):
class Education < ActiveRecord::Base
attr_accessible :description, :graduation, :student_id, :faculty_id, :department_id
belongs_to :faculty # foreign key - faculty_id
belongs_to :student
end
# id :integer not null, primary key
# student_id :integer
# faculty_id :integer
# description :text
# graduation :string(255)
class Faculty < ActiveRecord::Base
attr_accessible :department_id, :name
has_many :educations
belongs_to :department
end