[英]Rails has_many :through
我在理解has_many和直通关系时遇到问题。 我尝试看这里的其他帖子并不清楚((不确定是不是因为我要实现的目的。)我正在尝试构建和应用程序,使用户在日历中拥有事件,并且每个用户都可以彼此之间交换事件。
我希望能够使用API(例如“ user.trades” <-)检索每个用户的数据,该API检索用户进行的所有交易以及其他方法,一个“ user.requested_trades”和另一个“用户”。 pending_trades”。 request_trades和pending_trades可以工作,但是如果我应该建立3路表关系,或者这2路就足够了。 完全说实话,我确实必须在控制台上进行操作,以弄清它执行哪种查询才能实现这两种方法。 但它仍然非常不清楚:through和:has_many。
class Trade < ActiveRecord::Base
belongs_to :seller,
:class_name => "User",
:foreign_key => "seller_id"
belongs_to :buyer,
:class_name => "User",
:foreign_key => "buyer_id"
end
class User < ActiveRecord::Base
has_many :events, :dependent => :destroy
has_many :requested_trades, -> { where(["trades.status = ?",'requested']).order("trades.created_at DESC") },
:class_name => "Trade",
:foreign_key => "buyer_id"
has_many :pending_trades, -> { where(["trades.status = ?",'pending']).order("trades.created_at DESC") },
:class_name => "Trade",
:foreign_key => "buyer_id"
has_many :sent_messages, -> { where(["messages.sender_deleted = ?", false]).order("messages.created_at DESC")},
:class_name => "Message",
:primary_key => "email",
:foreign_key => "sender_id"
has_many :received_messages, -> { where(["messages.recepient_deleted = ?", false]).order("messages.created_at DESC")},
:class_name => "Message",
:primary_key => "email",
:foreign_key => "recepient_id"
has_many:通过两个模型之间的多对多关系。 但是这种多对多的关系是通过第三种模式维持的。 假设有两个模范教师和部门。 两者都是双向的(多对多关系)。 但是我们不能仅使用这两个模型来维护关系,因此我们需要第三个模型。 假设是教师部门。 因此,与教师之间的任何部门关系,我们都可以使用第三模型中的制作条目来完成,反之亦然。
class Teacher < ActiveRecord::Base
#It describes that teacher many-to many relationship with teacher_department model and
#also if teacher gets deleted depending entries in teacher_departments also gets deleted.
has_many :teacher_departments, dependent: :destroy
#It describe that teacher having multiple departments though 3rd teacher_departments
#model.
has_many :departments, through: :teacher_departments
end
class Department < ActiveRecord::Base
#It describes that many-to many relationship with teacher_department
#model and also if department gets deleted depending entries in teacher_departments
#also gets deleted.
has_many :teacher_departments, dependent: :destroy
#It describe that department having multiple teachers though 3rd teacher_departments
#model.
has_many :teachers, through: :teacher_departments
end
class TeacherDepartment < ActiveRecord::Base
#It describe that this model are belonging to both teacher and department model.
belongs_to :teacher
belongs_to :department
end
例。
Teacher.first.departments.create()
它将在Teacher_department表中创建具有教师第一个ID和新创建的部门ID的新条目。
因此,您和第一老师的访问部门
Teacher.first.departments
您还可以查看以下Rails指南链接
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.