【问题标题】:has_many through return multiple associated objects in Rails 4has_many 通过在 Rails 4 中返回多个关联对象
【发布时间】:2014-12-12 11:52:21
【问题描述】:

我通过 Rails 中的关联遇到了 has_many 的问题。 有模特:

class Interval < ActiveRecord::Base
 belongs_to :training

 has_many :termins
 has_many :users, through: :termins
end

class User < ActiveRecord::Base

 belongs_to :role
 has_many :termins
 has_many :intervals, through: :termins
end

class Termin < ActiveRecord::Base
 belongs_to :interval
 belongs_to :user
end

所以,我为一个用户创建了一个区间,并创建了几个终端:

Interval.first #=> <Interval id: 6, from: "2014-10-17", to: "2014-11-17", training_id: 1, created_at: "2014-10-16 22:39:38", updated_at: "2014-10-16 22:39:38">

Interval.first.termins 
[
  #<Termin id: 9, interval_id: 6, user_id: 4, term: "2014-10-16", created_at: "2014-10-16 22:42:15", updated_at: "2014-10-16 22:42:15">,
  #<Termin id: 10, interval_id: 6, user_id: 4, term: "2014-10-23", created_at: "2014-10-16 22:43:02", updated_at: "2014-10-16 22:43:02">,
  #<Termin id: 11, interval_id: 6, user_id: 4, term: "2014-10-31", created_at: "2014-10-16 22:44:40", updated_at: "2014-10-16 22:44:40">
]

但是,当我输入: 间隔.first.users

[
 #<User id: 4, email: "member@gym.com", encrypted_password:    "$2a$10$ChVTiXt2EjKzKYiq4GEvT.d21MuOHydJxCGxDextAYt0...", reset_password_token: nil, reset_password_sent_at: nil, remember_created_at: nil, sign_in_count: 0, current_sign_in_at: nil, last_sign_in_at: nil, current_sign_in_ip: nil, last_sign_in_ip: nil, created_at: "2014-10-15 22:27:44", updated_at: "2014-10-16 21:21:25", first_name: "Member", last_name: "Member", phone_number: "00000000", date_of_birth: "1989-10-16", sex: "0", role_id: 3>,
 #<User id: 4, email: "member@gym.com", encrypted_password: "$2a$10$ChVTiXt2EjKzKYiq4GEvT.d21MuOHydJxCGxDextAYt0...", reset_password_token: nil, reset_password_sent_at: nil, remember_created_at: nil, sign_in_count: 0, current_sign_in_at: nil, last_sign_in_at: nil, current_sign_in_ip: nil, last_sign_in_ip: nil, created_at: "2014-10-15 22:27:44", updated_at: "2014-10-16 21:21:25", first_name: "Member", last_name: "Member", phone_number: "00000000", date_of_birth: "1989-10-16", sex: "0", role_id: 3>,
 #<User id: 4, email: "member@gym.com", encrypted_password: "$2a$10$ChVTiXt2EjKzKYiq4GEvT.d21MuOHydJxCGxDextAYt0...", reset_password_token: nil, reset_password_sent_at: nil, remember_created_at: nil, sign_in_count: 0, current_sign_in_at: nil, last_sign_in_at: nil, current_sign_in_ip: nil, last_sign_in_ip: nil, created_at: "2014-10-15 22:27:44", updated_at: "2014-10-16 21:21:25", first_name: "Member", last_name: "Member", phone_number: "00000000", date_of_birth: "1989-10-16", sex: "0", role_id: 3>
]

我只想为最后一个查询获取 1 条记录,因为有 3 次相同的用户。 欢迎任何帮助。 谢谢

【问题讨论】:

    标签: ruby-on-rails associations rails-activerecord has-many-through


    【解决方案1】:

    制作:

    has_many :users, -> { uniq }, through: :termins
    

    在 Rails 4 之前,您可以使用 has_many :users, through: :termins, uniq: true,但现在它已被弃用,使用上面的 dash-rocket 是一种可行的方法。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-12-16
      • 2017-04-23
      • 2016-03-20
      • 1970-01-01
      • 2016-10-06
      • 2015-11-16
      • 2013-11-24
      • 1970-01-01
      相关资源
      最近更新 更多