Anu*_*rag 67 ruby-on-rails associations rails-models rails-activerecord
Rails有一个has_one :through
关联,通过第二个模型帮助建立与第三个模型的一对一关联.除了建立一个快捷方式关联之外,它的实际用途是什么,否则这将是一个额外的步骤.
以Rails 指南为例:
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
Run Code Online (Sandbox Code Playgroud)
可能允许我们做类似的事情:
supplier.account_history
Run Code Online (Sandbox Code Playgroud)
否则将达到:
supplier.account.history
Run Code Online (Sandbox Code Playgroud)
如果它只是为了更简单的访问,那么从技术上讲,可能存在一对一的关联,它将模型与通过n-1模型的某个第n个模型连接起来,以便于访问.除了快捷方式之外,还有什么我想念的吗?
Sta*_*len 53
逻辑,好吧,这可能听起来有点弱,但说"我有一个供应商谁有我的账户,我想看到这个供应商的整个账户历史"是合乎逻辑的,所以这对我来说是有道理的能够直接从供应商访问帐户历史记录.
效率,这对我来说是我使用的主要原因:through
,只是因为这会发出一个连接语句而不是调用供应商,然后是帐户,然后是account_history.注意到数据库调用的次数?
使用:through
,1呼叫获取供应商,1呼叫获取account_history(rails自动用于:join
通过帐户检索)
使用普通关联,1次呼叫获取供应商,1次呼叫获取帐户,1次呼叫获取account_history
这就是我的想法=)希望它有所帮助!
rya*_*an0 11
我很惊讶没有人触及过Association Objects.
甲has_many
(或has_one
):through
关系利于使用的关联对象图案,其是当你有彼此相关的两件事情,并且该关系自身具有的属性(即,日期时的关联制成或当它失效).
一些人认为这是has_and_belongs_to_many
ActiveRecord助手的一个很好的替代品.这背后的原因是,您很可能需要更改关联的性质或添加关联,并且当您进入项目的几个月时,如果关系最初设置为关联,这可能会非常痛苦a has_and_belongs_to_many
(第二个链接详细介绍).如果最初使用has_many :through
关系设置它,那么在项目的几个月内,可以轻松地重命名连接模型或向其添加属性,从而使开发人员更容易响应不断变化的需求.计划变革.
反向关联:考虑经典情况用户 - 成员 - 组.如果用户可以是许多组中的成员,则组具有许多成员或用户,并且用户具有许多组.但如果用户只能成为一个组中的成员,则该组仍有许多成员:class User has_one :group, :through => :membership
但是class Group has_many :members, :through => memberships
.中间模型membership
可用于跟踪反向关系.
可扩展性:has_one :through
可以轻松扩展has_many :through
关系并扩展到关系
归档时间: |
|
查看次数: |
45997 次 |
最近记录: |