我有一个可选的时间where子句。
即where('created_at < ?', params[:infinite_scroll_time_buffer])
。
这包含在一系列电话中。
我意识到where
可以使用哈希值,如果哈希值为空,或者缺少任何属性,则不会包含它们。这听起来不错,因为我可以避免检查params[:infinite_scroll_time_buffer]
是否存在,只需包含where
子句并让Rails处理其余部分。
问题如下:
def action
options = {}
options[:created_at] = params[:infinite_scroll_time_buffer]
Post.method.another_method.where(options).another_method
end
除了SQL查询检查post.created_at = ?
而不是post.created_at < ?
(理所当然地)之外,这样可行。
我可以有一段时间,但我不能为我的生活找到时间来引用所有时间的开头,或类似Time::THE_BEGINNING_OF_EVERYTHING_AS_WE_KNOW_IT_DUN_DUN_DUN
这样我就可以拥有从params[:infinite_scroll_time_buffer]
开始的范围。还有另一种方法来实现这一目标吗?
答案 0 :(得分:1)
在 post.rb 中创建一个范围:
scope :created_before, ->(time) { where('created_at < ?', time) }
现在:
def action
options = {}
Post.method.another_method.where(options).
created_before(params[:infinite_scroll_time_buffer]).
another_method
end
如果您没有params[:infinite_scroll_time_buffer]
,请不要首先进行查询:
def action
options = {}
# more operation on options hash here
posts = Post.method.another_method.where(options)
posts = posts.created_before(params[:infinite_scroll_time_buffer]) if params[:infinite_scroll_time_buffer].present?
posts = posts.some_another_method
end