【问题标题】:Association in mongoidmongoid 中的关联
【发布时间】:2013-01-28 04:57:48
【问题描述】:

我有三个模型,Employee、Job、LeaveDay。如下:

class Employee
 field :name
 belongs_to :job
end
class Job
 field :job_title
 has_many :employees
 has_many :leave_days
end
class LeaveDay
 belongs_to :job    
 field :no_of_leave_days
end

我想建立一种关系,我想在其中跟踪与工作相关的员工的no_of_leave_days。这怎么可能。提前致谢。

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-3 associations mongoid


    【解决方案1】:

    我认为您需要在 LeaveDay 中添加“belongs_to:employee”和在 Employee 中添加“has_many:leave_days”。因此,@emp.leave_days 将为您提供特定员工所有工作的所有假期。同样,@emp.job.leave_days 将返回 cuttent 员工当前工作的 leave_days。

    【讨论】:

      【解决方案2】:

      我对 Mongoid 不是很熟悉。您可以阅读 here 更多关于 mongoid 关系的信息。

      这是一个非常简单的例子。希望对您有所帮助。

      这是模型定义:

      class Employee
        include Mongoid::Document
        field :name
        belongs_to :job
      end
      
      class Job
        include Mongoid::Document
        field :job_title
        has_many :employees
        embeds_many :leave_days
      end
      
      class LeaveDay
        include Mongoid::Document
        embedded_in :job
        field :no_of_leave_days
      end
      

      及用法示例:

      pry(main)> j = Job.create(job_title: "Test Job")
      => #<Job _id: 510633e0784931179a000001, _type: nil, job_title: "Test Job">
      pry(main)> LeaveDay.create(job: j, no_of_leave_days: 1)
      => #<LeaveDay _id: 5106348f784931179a000002, _type: nil, no_of_leave_days: 1>
      pry(main)> LeaveDay.create(job: j, no_of_leave_days: 2)
      => #<LeaveDay _id: 51063687784931179a000003, _type: nil, no_of_leave_days: 2>
      pry(main)> LeaveDay.create(job: j, no_of_leave_days: 3)
      => #<LeaveDay _id: 51063689784931179a000004, _type: nil, no_of_leave_days: 3>
      pry(main)> Job.first.leave_days.map(&:no_of_leave_days)
      => [1, 2, 3]
      pry(main)> Employee.create(name: 'Employee name', job: Job.first)
      => #<Employee _id: 510637cf784931179a000005, _type: nil, name: "Employee name", job_id:    "510633e0784931179a000001">
      pry(main)> Employee.first.job.leave_days.map(&:no_of_leave_days)
      => [1, 2, 3]
      

      【讨论】:

      • 我试过了,但我不知道如何在控制器中跟踪 no_of_leave_days。
      • 我已经编辑了我的答案并提供了简单的例子。希望它会有所帮助。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多