gpt4 book ai didi

ruby-on-rails - 使用 ActiveRecord 进行条件链接

转载 作者:行者123 更新时间:2023-12-03 15:46:06 27 4
gpt4 key购买 nike

我试图实现条件链接,这就是我得到的:

Controller 索引 Action 代码:

@range_start = params[:range_start]
@range_stop = params[:range_stop]
Contract.within_range(@range_start, @range_stop)

型号代码:
def self.within_range(range_start = Date.today - 1.month, range_stop = nil)
self.started_after(range_start).started_before(range_stop)
end

def self.started_after(range_start)
if range_start.blank?
self
else
self.where('start_date >=?', range_start)
end
end

def self.started_before(range_stop)
if range_stop.blank?
self
else
self.where('start_date<=?', range_stop)
end
end

它有效,但看起来不太好。我尝试使用 tap 稍微改进一下, 没有成功。如何改进这段代码?

更新: In 可以转换为内联条件,但也许还有其他可以改进的地方?
range_start.blank? ? self : self.where('start_date >=?', range_start)

更新 2:如果 range_stop未设置,此代码实际上不起作用, started_after条件不适用。

我要回什么 started_before不松动第一条件?

最佳答案

时间过去了,denis.peplin 的解决方案已经被弃用了。否则它是对的,你需要一个链接的关系。所以不要使用 scoped你应该使用 all像这样:

def self.started_before(range_stop)
if range_stop.blank?
all
else
where('start_date<=?', range_stop)
end
end

但您也可以将其写为更简洁的范围:
scope :started_before, ->(range_stop){ range_stop.blank? ? all : where('start_date<=?', range_stop) }

关于ruby-on-rails - 使用 ActiveRecord 进行条件链接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12909221/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com