我有一个名为tag的rails类:
class Tag < ActiveRecord::Base
attr_accessor :is_enabled_on_item # a virtual attribute for ouptutting json
我想调整is_enabled_on_item,如下所示:
t.each { |tmp| tmp.is_enabled_on_item=true if current_tag_ids.include?(tmp.tagid) }
得到:
[
{
tagid:1,
phrase: "blue",
is_enabled_on_item: true
},
{
tagid:2,
phrase: "yellow",
is_enabled_on_item: false
}
]
我试过收集
t.collect { |tmp| tmp.is_enabled_on_item=true if current_tag_ids.include?(tmp.tagid) }
但它回归[true, false]
。我怎样才能达到我想要的目标?
我希望它返回一个标签数组。
这样的事情可行,但中间人arr
似乎没必要:
arr=[]
t.each do |tmp|
tmp.is_enabled_on_item=current_tag_ids.include?(tmp.tagid)
arr << tmp
end
arr
答案 0 :(得分:2)
t.map do |tmp|
tmp.attributes.merge(is_enabled_on_item: current_tag_ids.include?(tmp.tagid))
end
答案 1 :(得分:1)
你对收集的看法几乎是正确的,试试这个:
t.collect { |tmp| tmp.is_enabled_on_item=current_tag_ids.include?(tmp.tagid); tmp }
请注意,赋值返回指定的值,而您必须在块中返回标记才能收集标记。
向前迈出一步并使用更多规范的方法和参数名称会很好:
tags.map { |tag| tag.is_enabled_on_item=current_tag_ids.include?(tag.tagid); tag }