Rails加入vs. has_many

时间:2018-06-18 08:40:03

标签: ruby-on-rails ruby-on-rails-4

我是rails的新手,实际上一直在读取范围内的连接以及如何使用has_many和through之类的关联。

我注意到我并不完全理解使用连接和has_many的区别。您似乎可以缩短查询,而不是使用连接,我可以使用has_many。

有人可以在两者之间给我一个很好的解释吗?谢谢!

1 个答案:

答案 0 :(得分:1)

我希望你知道SQL joinsjoins方法用于两个表的内连接,主要用于自定义查询。

例如,User.joins(:reports)将导致以下查询:

SELECT "users".* FROM "users" INNER JOIN "reports" ON "reports"."user_id" = "users"."id"

has_many_through是关联提供的Rails通过第三个模型在两个模型之间建立多对多关系。

例如,从Rails docs中查看以下示例:

class Physician < ApplicationRecord
  has_many :appointments
  has_many :patients, through: :appointments
end

class Appointment < ApplicationRecord
  belongs_to :physician
  belongs_to :patient
end

class Patient < ApplicationRecord
  has_many :appointments
  has_many :physicians, through: :appointments
end