我与 Rails 中的扩展有一个 AR 关联,类似于此链接中提供的示例: ActiveRecord Association Extensions
has_many :issues, :through => :qbert_issues do
def tracking
where("qbert_issues.kind = ?", "tracking")
end
def blocking
where("qbert_issues.kind = ?", "blocking")
end
end
如上所示,我的是多类型的......我需要在我的连接表中填充一个“种类”列。理想情况下,这应该可以工作:
q = QBert.find(123)
q.issues.tracking << Issue.find(234)
因此,文章建议重载<<
并执行以下操作:
has_many :issues, ... do
...
def <<(issue)
issue.kind = "UserAccount"
proxy_association.owner.issues += [issue]
end
end
如果 kind 是静态的,那就太好了。
看来我可以做到这一点...
has_many :issues, ... do
...
def <<(*args)
issue, kind = args.flatten
issue.kind = kind
proxy_association.owner.issues += [issue]
end
end
这至少可以让我这样做:
q = QBert.find(123)
q.issues.tracking << [Issue.find(234), :tracking]
这对我来说似乎不是很干燥......有更好的方法吗?如果您考虑到 kind 访问器不在连接表中,则可以加分qbert_issues
。我猜我只需要QBertIssue
直接通过模型手动添加关联。