首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在ActiveRecord中合并两个字典条目?

如何在ActiveRecord中合并两个字典条目?
EN

Stack Overflow用户
提问于 2013-01-02 06:24:01
回答 1查看 144关注 0票数 0

我在我的项目中使用cedict开源汉英词典。我把它放在一个ActiveRecord建模的postgresql数据库中,与其他模型没有关系。

当我运行DictionaryEntry.count(:id, :group => :simplified, :having => 'count(id) > 1')时,它显示2141个重复条目。这些条目中的简化字相同,但定义不同。

例如,注意放之四海而皆准有两个条目,但它有两个不同的定义:

代码语言:javascript
复制
irb(main):009:0> DictionaryEntry.find_all_by_simplified("放之四海而皆准")
  DictionaryEntry Load (193.6ms)  SELECT "dictionary_entries".* FROM "dictionary_entries" WHERE "dictionary_entries"."simplified" = '放之四海而皆准'
[
    [0] #<DictionaryEntry:0x007feb8750f9e0> {
                 :id => 42164,
        :traditional => "放之四海而皆准",
         :simplified => "放之四海而皆准",
             :pinyin => "fang4 zhi1 si4 hai3 er2 jie1 zhun3",
         :definition => "appropriate to any place and any time -idiom; universally applicable/a panacea",
         :created_at => Sat, 22 Dec 2012 03:07:44 UTC +00:00,
         :updated_at => Sat, 22 Dec 2012 03:07:44 UTC +00:00
    },
    [1] #<DictionaryEntry:0x007feb8750f378> {
                 :id => 42165,
        :traditional => "放之四海而皆準",
         :simplified => "放之四海而皆准",
             :pinyin => "fang4 zhi1 si4 hai3 er2 jie1 zhun3",
         :definition => "applicable anywhere -idiom",
         :created_at => Sat, 22 Dec 2012 03:07:44 UTC +00:00,
         :updated_at => Sat, 22 Dec 2012 03:07:44 UTC +00:00
    }
]

我想合并这两个条目,这样当我运行DictionaryEntry.find_all_by_simplified("放之四海而皆准")时,它将返回在/后面添加了已删除对象定义的对象,如下所示:

代码语言:javascript
复制
[
    [0] #<DictionaryEntry:0x007feb8750f9e0> {
                 :id => 42164,
        :traditional => "放之四海而皆准",
         :simplified => "放之四海而皆准",
             :pinyin => "fang4 zhi1 si4 hai3 er2 jie1 zhun3",
         :definition => "appropriate to any place and any time -idiom; universally applicable/a panacea/applicable anywhere -idiom",
         :created_at => Sat, 22 Dec 2012 03:07:44 UTC +00:00,
         :updated_at => Sat, 22 Dec 2012 03:07:44 UTC +00:00
    }
]

(我可能也想合并拼音,如果它碰巧不同,还不确定...嗯..。是的,我可能需要这样做。)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-01-03 21:31:14

在rails控制台中输入以下命令似乎对我有效:

代码语言:javascript
复制
dups = DictionaryEntry.count(:id, :group => :simplified, :having => 'count(id) > 1')
dups.each do |d|
twins = DictionaryEntry.find_all_by_simplified(d[0])
if twins[0].pinyin == twins[1].pinyin
twins[1].definition = twins[1].definition + "/" + twins[0].definition
twins[1].save
twins[0].destroy
end
end

我不得不运行了几次。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14114796

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档