繁体   English   中英

Rails has_many:through

[英]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指南链接

http://guides.rubyonrails.org/association_basics.html#choosing-between-has-many-through-and-has-and-belongs-to-many

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM