使用hstore字段作为关联字段

时间:2014-11-19 20:58:01

标签: ruby-on-rails postgresql rails-activerecord

关于使用像关联模型这样的hstore字段是否安全或良好做法的问题,例如我的模型是用户,奖品和奖励这个案例我希望有以下关联:

class User < ActiveRecord::Base
   has_many rewards
end

class Reward < ActiveRecord::Base
   belongs_to :user
end

class Prize < ActiveRecord::Base

end

注意:奖励模型将有一个hstore字段,我将存储奖品,如{prize_id:1,name:***,等},这是考虑有记录总是以防奖品对象可能是删除,这就是为什么我不想建立has_many关系的原因。任何想法或评论,如果这可能是一个正确的方式,将不胜感激!

1 个答案:

答案 0 :(得分:1)

恕我直言,使用任何一种“非常规”机制来模拟ActiveRecord中的关系是不值得的。我会使用标准机制(Reward belongs_to :prizehas_many :prizes)并让您的Prize模型包含您希望获奖时设置的“墓碑”位变得有效隐形。您可以采取一些措施来使这项工作更好/更轻松:

  1. 覆盖模型的delete方法,以便不是实际删除对象,而是设置其墓碑位。

  2. 使用default_scope隐藏设置了墓碑位的奖品,以便“已删除”奖品不会显示在例如可用奖品列表中。

  3. 使用处理此类“软删除”的gem,例如Paranoia