`except':EXCEPT不支持(Sequel :: InvalidOperation)

时间:2016-01-05 01:43:08

标签: ruby sinatra

我在尝试运行sinatra应用程序时遇到错误。我试着谷歌搜索它没有出现。如果你们可以提供任何关于如何解决它或我做错了什么的建议,那将是很有帮助的。

错误输出的部分代码

   def logTownDeltas!(newDate)
        deltas = []

        oldTowns = @db[:towns].filter { data_timestamp < newDate }
        currentTowns = @db[:towns].except(oldTowns)

        destroyedTownIDs = oldTowns.select(:town_id).except(currentTowns.select(:town_id)).collect { |d| d[:town_id] }
        createdTownIDs = currentTowns.select(:town_id).except(oldTowns.select(:town_id)).collect { |c| c[:town_id] }

        alteredTowns = Hash.new
        currentTowns.each { |town|

        }

错误

    C:/Ruby22/lib/ruby/gems/2.2.0/gems/sequel-4.29.0/lib/sequel/dataset/query.rb:119:in `except': EXCEPT not supported (Sequel::InvalidOperation)
    from C:/Users/dakota/Desktop/IllyriadAp/data_syndicator/core.rb:107:in `logTownDeltas!'
    from C:/Users/dakota/Desktop/IllyriadAp/data_syndicator/core.rb:93:in `parseTownData'
    from C:/Users/dakota/Desktop/IllyriadAp/data_syndicator/core.rb:45:in `block (2 levels) in run!'
    from C:/Ruby22/lib/ruby/2.2.0/open-uri.rb:154:in `open_uri'
    from C:/Ruby22/lib/ruby/2.2.0/open-uri.rb:716:in `open'
    from C:/Ruby22/lib/ruby/2.2.0/open-uri.rb:34:in `open'
    from C:/Users/dakota/Desktop/IllyriadAp/data_syndicator/core.rb:44:in `block in run!'
    from C:/Users/dakota/Desktop/IllyriadAp/data_syndicator/core.rb:41:in `each'
    from C:/Users/dakota/Desktop/IllyriadAp/data_syndicator/core.rb:41:in `run!'
    from data_syndicator.rb:17:in `<main>'

插入数据库

 destroyedTownIDs.each { |d|
            t = oldTowns.filter(:town_id => d).first
            @db[:town_deltas].insert(
                :happened_at => newDate,
                :town_id => d,
                :owner_id => t[:owner_id],
                :name => t[:name],
                :population => 0,
                :is_capital => 0,
                :is_alliance_capital => 0)
        }


        createdTownIDs.each { |c|
            t = currentTowns.filter(:town_id => c).first
            @db[:town_deltas].insert(
                :happened_at => newDate,
                :town_id => c,
                :owner_id => t[:owner_id],
                :name => t[:name],
                :population => t[:population],
                :is_capital => t[:is_capital],
                :is_alliance_capital => t[:is_alliance_capital])
        }

Link to full source just in case

1 个答案:

答案 0 :(得分:3)

试试这个:

def logTownDeltas!(newDate)
  deltas = []
  currentTowns = @db[:towns].filter { data_timestamp >= newDate }

  destroyedTownIDs = @db[:towns].select(:town_id).filter { data_timestamp < newDate }.collect { |d| d[:town_id] }
  createdTownIDs = @db[:towns].select(:town_id).filter { data_timestamp >= newDate }.collect { |c| c[:town_id] }

        alteredTowns = Hash.new
        currentTowns.each { |town|

        }