Rails có liên kết has_one :through
giúp thiết lập liên kết một-một với mô hình thứ ba bằng cách thực hiện mô hình thứ hai. Việc sử dụng thực sự điều đó ngoài việc tạo ra một liên kết phím tắt là gì, nếu không sẽ là một bước phụ.Rails has_one: thông qua liên kết
Lấy ví dụ này từ Rails guide:
class Supplier < ActiveRecord::Base
has_one :account
has_one :account_history, :through => :account
end
class Account < ActiveRecord::Base
belongs_to :supplier
has_one :account_history
end
class AccountHistory < ActiveRecord::Base
belongs_to :account
end
có thể cho phép chúng ta làm điều gì đó như:
supplier.account_history
mà nếu không sẽ đạt được như:
supplier.account.history
Nếu đó là chỉ để truy cập đơn giản sau đó về mặt kỹ thuật có thể có một hiệp hội một-một t kết nối một mô hình với một số mô hình thứ n thông qua các mô hình n-1 để truy cập dễ dàng hơn. Có bất cứ điều gì khác với nó mà tôi đang thiếu bên cạnh các phím tắt?
Tôi nghĩ đối số lôgic là khá hợp lệ. Nghe có vẻ tự nhiên hơn, hãy cho tôi biết lịch sử tài khoản của nhà cung cấp này và không phải là lịch sử tài khoản của nhà cung cấp. Rất tinh tế nhưng vẫn dễ nhớ hơn khi xem xét triết lý của Ruby/Rails về các câu thay vì mã. Tôi biết chúng ta có thể thấy các truy vấn DB thực tế đang được ban hành nhưng Rails có chỉ định cách thức các cuộc gọi phương thức này sẽ dịch sang SQL không? – Anurag
Điều này cũng tránh vi phạm Luật Demeter. –
@TomCrayford, tôi thực sự không thấy nó như thế nào. Điều này không làm cho mối quan hệ ít trực tiếp hơn? –