1

在一个模型定义中,你可以有多个belongs_to 语句吗?如果答案是否定的,请不要继续阅读。我正在尝试在 sinatra 应用程序中创建三个与 mongoid 的 1-n 引用关系。

楷模

class SkillTrack
  include Mongoid::Document
  belongs_to :student
  belongs_to :grading_period
  belongs_to :teacher
end

class Student
  include Mongoid::Document
  field :name
  field :nickname
  field :dob, type: Date
  has_many :skill_tracks
end

class GradingPeriod
  include Mongoid::Document
  field :school_year
  field :period_name
  field :signing_date, type: Date
  has_many :skill_tracks
end

class Teacher
  include Mongoid::Document
  field :name
  has_many :skill_tracks
end

路线

post "/skill_track/new" do
  form = params[:formdata] # using sinatra form helpers gem
  student = Student.find("#{formdata["student_mongo_id"]}") 
  working = (student.skill_tracks.create).id
  ??? what do I do with working to make it a child of a teacher and of a grading_period?
end

我试过的

从mongoid 文档中对我来说最有希望的是:

band.member_ids = [ id ] #Set the related document ids.

我在 irb 中捣乱,并在我的模型中尝试了很多变化,但我无法为新创建的技能跟踪对象设置家长老师或评分期。学生外键在创建时已正确设置。我希望我有一个简单的语法无知,但我尝试了很多变体,我想知道我是否可以做到这一点。

更新:

我只需要将 working.save 添加到 David Troyer 的回答和繁荣工作中。

post "/skill_track/new" do
 form = params[:formdata]
 student = Student.find("#{formdata["student_mongo_id"]}") 
 working = student.skill_tracks.create
 working.teacher = Teacher.create # or find
 working.grading_period = GradingPeriod.create # or find
 working.save
end
4

1 回答 1

0

我相信是这样。如果我正确理解您的问题,请尝试在子 SkillTrack 文档上使用一些设置器。

post "/skill_track/new" do
  form = params[:formdata]
  student = Student.find("#{formdata["student_mongo_id"]}") 
  working = student.skill_tracks.create
  working.teacher = Teacher.create # or find
  working.grading_period = GradingPeriod.create # or find
end

进一步深入了解您引用的mongoid 文档的操作部分

于 2013-09-20T12:40:14.607 回答