【发布时间】:2011-05-24 17:47:28
【问题描述】:
我正在尝试限制执行 mysql 查询的次数,因为这最终可能是 2k+ 查询,只是为了完成一个相当小的结果。
我正在浏览一个 CSV 文件,我需要检查 csv 中内容的格式是否与 db 期望的格式相匹配,有时我会尝试完成一些基本的清理工作(例如,我有一个字段是字符串,但有时在 csv 中为 jb2003-343,我需要去掉 -343)。
我要做的第一件事是从数据库中按名称获取我需要从 csv 中检索的字段列表,然后在 csv 中获取这些列的索引,然后遍历 csv 中的每一行并获取每个索引列
get_fields = BaseField.find_by_group(:all, :conditions=>['group IN (?)',params[:group_ids]]) csv = CSV.read(csv.path) first_line=csv.first first_line.split(',') csv.each_with_index 做 |行| 如果行==0 col_indexes=[] csv_data=[] get_fields.each 做 |col| col_indexes问题是,当我为输出添加 csv_data 的内容时,我不再与原始 get_fields 查询有任何连接。因此,我似乎不能说“这是否与 db 预期的数据类型相匹配”。
我可以通过使我下降到那个级别的相同过程返回,然后进行另一个这样的查询
get_cleanup = BaseField.find_by_csv_col_name(first_line[col]) 如果 get_cleanup.format==row[col].is_a csv_row但正如我所提到的,这可能意味着 get_cleanup 运行了 2000 多次。
除了这样做,有没有办法在原始 get_fields 结果中搜索名称,然后获取关联的字段?
我尝试搜索“搜索轨道对象”,但不断返回有关构建搜索的结果,而不是在现有对象中搜索。
我知道我可以做 array.search,但在对象 api 中看不到任何关于搜索的内容。
注意:上面的代码可能并不完美,因为我还没有运行它,只是把它写在我的脑海中,但希望它能让你知道我要做什么。
【问题讨论】:
标签: ruby-on-rails search object