- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
如何封装一组操作(其中大部分本质上是 .where(...))并将其应用于不同的模型,以使某些模型可能无法实现某些操作并应返回空集合。 (非必要代码跳过)
我设计的(但不满意):
class ActivityFinder
def self.find(query, limit = nil)
activities = get_activities(query)
activities = activities.sort_by(&:created_at).reverse // some-kind of merge-sort
activities = activities.slice(0, limit) if limit.present?
activities
end
private
def self.get_activities(query)
activities = []
activities += query.apply(ModelA)
activities += query.apply(ModelB)
activities += query.apply(ModelC)
activities
end
end
class ActivityQuery
def created_before(time)
@created_before = time
self
end
def created_after(time)
@created_after = time
self
end
def apply(activity)
activity = activity.where("#{activity.table_name}.created_at < ?", @created_before) if @created_before.present?
activity = activity.where("#{activity.table_name}.created_at >= ?", @created_after) if @created_after.present?
// more operations, not all of them are suported by ModelC
rescue NoMethodError
return []
end
end
query = ActivityQuery.new.created_before(last_time).with_hash(...)
activities = ActivityFinder.find(query)
case
处理查询中的语句,以这种方式将查询对象与每个模型耦合最佳答案
为避免紧密耦合,请将模型特定代码放入模型中:
class ModelA < ActiveRecord::Base
scope :created_before, ->(timestamp) { where("created_at < ?", timestamp) }
scope :created_after, ->(timestamp) { where("created_at >= ?", timestamp) }
scope :with_hash, ->(hash) { ... }
end
class ModelB < ActiveRecord::Base
scope :created_before, ->(timestamp) { where("other_column < ?", timestamp) }
scope :created_after, ->(timestamp) { where("other_column >= ?", timestamp) }
scope :with_hash, where('false') # empty, chain-able collection
end
class ActivityQuery
def apply(activity)
activity = activity.scoped
activity = activity.created_before(@created_before) if @created_before.present?
activity = activity.created_after(@created_after) if @created_after.present?
activity = activity.with_hash(@hash) if @hash.present?
activity
end
end
NoMethodError
并且不再摆弄模型的实现细节。
关于ruby-on-rails - Rails 的 QueryObject - 如何封装 ActiveRecord 上的一组操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16082615/
我编写了几个测试函数来说明问题(或者至少是一些我不理解的行为)。我只是在 Alfresco 4.2.e 社区存储库上执行一些基本的 CMIS 查询,但根据我使用的是 session.query() 还
这个问题不太可能帮助任何 future 的访问者;它只与一个小的地理区域、一个特定的时间点或一个非常狭窄的情况相关,这些情况并不普遍适用于互联网的全局受众。为了帮助使这个问题更广泛地适用,visit
我正在将 queryObject 传递到 CFC。我可以写 Dump(myQryObject) 并且我看到了 queryObjects 内容,到目前为止一切都很好。我可以编写一个 select 语句并
如何封装一组操作(其中大部分本质上是 .where(...))并将其应用于不同的模型,以使某些模型可能无法实现某些操作并应返回空集合。 (非必要代码跳过) 我设计的(但不满意): class Acti
我正在使用 Puppeteer查找内存泄漏问题。我正在使用 puppeteer 师的 page.metrics() API,但我无法理解每个属性的含义。随着时间的推移,我在指标中的所有值(value)
我是一名优秀的程序员,十分优秀!