Ruby Inject不断返回类
我正在运行一个简单的SQL查询以返回哈希。 虽然我可以毫不费力地使用.each方法,但我希望也可以使用.inject({})方法,但是这个方法有三分之二的时间返回nil 谁能解释我做错了什么 这是最好的。每种方法都很好Ruby Inject不断返回类,ruby,hash,Ruby,Hash,我正在运行一个简单的SQL查询以返回哈希。 虽然我可以毫不费力地使用.each方法,但我希望也可以使用.inject({})方法,但是这个方法有三分之二的时间返回nil 谁能解释我做错了什么 这是最好的。每种方法都很好 def self.availabilities(days=10) hash = {} where( 'date >= ? AND date <= ?', Date.today, Date.today + days )
def self.availabilities(days=10)
hash = {}
where(
'date >= ? AND date <= ?',
Date.today, Date.today + days
)
.each do |availability|
p availability
if hash[availability.checker.display_name]
hash[availability.checker.display_name] << availability.date
else
hash[availability.checker.display_name] = [availability.date]
end
end
hash
end
这是注入方法
.inject({}) do |hash,elmt|
p "hash ==> #{hash}"
puts '------------------'
if hash[elmt.checker.display_name]
hash[elmt.checker.display_name] << elmt.date
hash
else
hash[elmt.checker.display_name] = elmt.date
hash
end
end
如果我尝试迭代它,它当然不起作用
谢谢你的帮助
祝你今天愉快 试试这个:
.inject({}) do |hash,elmt|
p "hash ==> #{hash}"
puts '------------------'
if hash[elmt.checker.display_name]
hash[elmt.checker.display_name] << elmt.date
hash
else
hash[elmt.checker.display_name] = elmt.date
hash
end
end
.inject({})do| hash,elmt|
p“hash==>#{hash}”
放置'-------------'
如果散列[elmt.checker.display_name]
hash[elmt.checker.display_name]通过生成冗余的中间对象,您滥用了inject
。除了应将元素作为块参数处理外,还应将每个\u与\u对象一起使用
,而不是注入
。另一个小问题是,在创建字符串时,当缺少相应的哈希元素时,应该创建一个数组
.each_with_object({}) do |elem, hash|
(hash[elmt.checker.display_name] ||= []) << elmt.date
end
应该是:
hash[elmt.checker.display_name] = [elmt.date]
感谢您的回答,我编辑了我的原始问题,我最初尝试了两个参数,但仍然不起作用。欢迎您查看我的答案,看看这里有什么问题。请注意:看起来您正在运行N+1查询,通过使用include
或数据库联接,您的代码的性能可能会提高很多。checker
是默认的属于\u:checker
关联吗display\u name
是数据库中的一列吗?非常感谢,我想我终于得到了它。。。显然,我在尝试注射不该注射的药物
.each_with_object({}) do |elem, hash|
(hash[elmt.checker.display_name] ||= []) << elmt.date
end
hash[elmt.checker.display_name] = elmt.date
hash[elmt.checker.display_name] = [elmt.date]