有没有更简单的方法来创建模型数据的哈希? (Ruby初学者)

时间:2011-11-02 08:48:47

标签: ruby-on-rails ruby

   list = []
    Merchant.all.each do |merchant|
      if merchant.url.present? && merchant.url != merchant.api_data.url
        list.push({
          :id => merchant.id,
          :name => merchant.name,
          :another => merchant.another,
          :another => merchant.another,
          :another => merchant.another
        })
      end
    end

是否有更简单的方法来创建该对象的某些字段的哈希?对不起,如果这太明显了。我正在从PHP过渡到Ruby。

2 个答案:

答案 0 :(得分:4)

merchants = Merchant.all.map do |merchant|
  if merchant.url.present? && merchant.url != merchant.api_data.url
    merchant.attributes.slice("id", "name", "another")
  end
end.compact

注意:

  • 为什么需要从商家实例中提取属性而不是使用记录本身?
  • 不要将通用名称用作list。为变量赋予有意义的名称。
  • 考虑将一些逻辑移到SQL级别。就是这样,创建过滤所需记录的范围,它会更快。

使用记录:

merchants = Merchant.all.select do |merchant|
  merchant.url.present? && merchant.url != merchant.api_data.url
end

答案 1 :(得分:0)

您可以#reject#select来自merchant.attributes的所有不需要/需要的属性,以便它们可以添加到您的列表中。可能会看看reject method。虽然以你已经的方式添加属性并不罕见。

祝你好运

托拜厄斯