如何在装饰器中定义关联?

时间:2018-08-22 16:57:22

标签: ruby-on-rails associations decorator

我不想使用复杂的关联来污染我的模型(在AR模型中仅具有必要的验证和简单的关联)

class Post < ActiveRecord::Base
  has_many :visible_comments,
    -> {
      where(deleted_at: nil).joins(:user).where(users: { active: true }) 
    }, class_name: 'Comment'
end

我想将此关联移到帖子的装饰器类中

PostsDecorator.new(posts).preload(:visible_comments)

是否可以创建装饰器类,以便可以在其上声明关联(例如,预加载关联)?

1 个答案:

答案 0 :(得分:0)

尚不清楚您要做什么。 “声明其上的关联”(装饰器)很可能是XY Problem

为什么不做类似的事情:

def fetch_data():
x_sample = np.random.rand(5,4)
a_sample = np.zeros((5,2))
a_sample[0,1] = 1
a_sample[1,1] = 1
a_sample[2,0] = 1
a_sample[3,1] = 1
a_sample[4,0] = 1

return x_sample, a_sample

(或类似的话。)

那么您就可以做到:

class PostsDecorator < SimpleDelegator

  def visible_comments
    Comment.where(post: component, deleted_at: nil)
  end

private

  def component
    @component ||= self.__getobj__
  end

end

关于“预加载”的想法,我不确定该怎么做。