我想在这样的链中使用 to_csv
方法 Company.where(created_at: '2010-01-01').limit(20).to_csv
为此,我使用了 current_scope
,它运行良好。但是当像这样调用相同的方法时 Company.to_csv
它会提示,因为 current_scope
是 nil。
现在我正在使用 (current_scope || where(true))
这对我有用,但也许有一种“正确”的方法来做到这一点?
def self.to_csv
CSV.generate do |csv|
(current_scope || where(true)).includes(:_address).each do |company|
csv << company.attributes
end
end
end
附言。我知道我可以只使用 current_scope
并调用 Company.all.to_csv
,但这不是这个问题的目的。
请您参考如下方法:
我知道我迟到了。我试图找到与 current_scope
对应的方法并偶然发现了您的问题(并找到了我宝贵的 current_scope
方法,谢谢)。
我认为对于你的情况,你可以这样写:
def self.to_csv
CSV.generate do |csv|
includes(:_address).each do |company|
csv << company.attributes
end
end
end
您不必使用 current_scope
方法,因为 Rails 已经为您完成了。
如果您想知道为什么我必须去寻找 current_scope
,我不得不像 n 次一样链接到 current_scope,请看这里:
def self.search(terms)
terms = Array(terms)
return all if terms.blank?
filtered = current_scope || all
terms.each do |term|
filtered = filtered.search_scope(term)
end
filtered
end
def self.search_scope(term)
# logic for scope on 1 term
# returns a scope
end
所以我可以这样调用:MyModel.search(['test1', 'test2']).limit(5)
或 MyModel.limit(5).search('测试')