跨两个ActiveRecord行镜像值的最佳方法是什么?

时间:2012-09-24 15:35:29

标签: ruby-on-rails activerecord

我有user#show视图和membership#show视图。

users#show视图的路径为

/users/john-mcenroe

membership#show视图将具有路径

/org-name/memberships/john-mcenroe

换句话说,用户#show和org#show视图都有相同的slu

为了查找速度,我认为最好的办法是在成员模型上镜像用户的slug列。为此,我创建了一个用户观察器,可以在用户的​​slug更改时更新成员资格。

观察者是跨数据库表回显非规范化数据的最佳方法吗?是否有一种原生的rails方式来代替(相当于对isntance的counter_cache)?

1 个答案:

答案 0 :(得分:0)

如果用户和成员之间存在关联,那么您可以使用“委托”方法。

例如:

class Membership
    belongs_to :user
    delegate :slug, :to => :user
end

在这种情况下,“slug”存储在用户模型中,您无需将数据复制到成员资格模型。