我正在尝试将字符串与对象数组进行比较。因此,当字符串值与数组中的该对象匹配时,它将保留它。
以下是示例:
sample = [#<Model::ID:0x007fcb83ace8a0
type_id: 6,
parent_name: "Old Man",
child_name: "Junior">,
#<Model::ID:0x007fcb83abd0a0
type_id: 6,
parent_name: "Mary",
child_name: "Michelle">,
#<Model::ID:0x007fcb83abce70
type_id: 6,
parent_name: "Ole Bob",
child_name: "Bobby">]
name = "Michelle"
所以我尝试了以下内容:
sample.keep_if { |keep_ele| [keep_ele]["child_name"] == name }
,这会返回以下错误: TypeError:没有将String隐式转换为Integer
但是当我在IRB中输出sample[1]["child_name"]
时,它等于"Michelle"
然后我尝试了:
sample.keep_if { |keep_ele| keep_ele["child_name"] == name }
它刚刚返回一个空数组:[]
关于如何运行keep_if的任何想法?
答案 0 :(得分:5)
keep_ele
块中的 keep_if
已经是数组中的模型对象(item)。您应该使用以下比较:
sample.keep_if { |keep_ele| keep_ele["child_name"] == name }
查看Array#keep_if
的文档页面。这是类似的例子:
sample = [
{
"child_name" => "Mike"
}, {
"child_name" => "Michelle"
}, {
"child_name" => "Joe"
}
]
name = "Michelle"
puts sample.keep_if { |keep_ele| keep_ele["child_name"] == name }
# => {"child_name"=>"Michelle"}