【发布时间】:2015-10-15 20:31:51
【问题描述】:
我现在正在构建一个考勤跟踪器。我目前有三个模型。我正在为我的用户模型使用设计
class User < ActiveRecord::Base
has_many :clients
has_many :attendances
class Client < ActiveRecord::Base
belongs_to :user
has_many :attendances
class Attendance < ActiveRecord::Base
belongs_to :user
belongs_to :client
考勤表上的列是user_idclient_idcreated_at和updated_at
这是我的思考过程:
我可以获得每个User的所有出席人数
我还可以获得特定Client的所有出席人数
我可以通过以下方式获取特定User 和Client 的所有出勤记录:Attendance.joins(:user, :client).where(:user_id => current_user) 返回一个
<ActiveRecord::Relation [#<Attendance id: 18, client_id: 151, created_at: "2015-07-24 21:36:16", updated_at: "2015-07-24 21:36:16", user_id: 4>, #<Attendance id: 19, client_id: 101, created_at: "2015-07-24 21:37:10", updated_at: "2015-07-24 21:37:10", user_id: 4>, #<Attendance id: 20, client_id: 114, created_at: "2015-07-24 21:37:39", updated_at: "2015-07-24 21:37:39", user_id: 4>, #<Attendance id: 21, client_id: 123, created_at: "2015-07-24 21:38:26", updated_at: "2015-07-24 21:38:26", user_id: 4>]>
我能否以某种方式返回Client 表以获取first_name 或email 之类的信息以及另一个where、include 或joins 语句?
或者我完全错过了什么,可能需要一个连接表并建立has_many, through: 关系?
【问题讨论】:
-
您已经可以访问所有这些内容了。
attendences.each {|a| p a.client.first_name }还是我误解了您要完成的工作? -
Attendance.joins(:user, :client).where(:user_id => current_user).select('clients.*')
标签: ruby-on-rails activerecord devise sqlite