运行bundle exec rake db:migrate时出错

时间:2014-11-01 21:56:09

标签: ruby-on-rails ruby

执行bundle exec rake db:migrate

后出现以下错误
/usr/lib/ruby/gems/1.8/gems/ancestry-2.1.0/lib/ancestry/instance_methods.rb:77: syntax error, unexpected ':', expecting ')'
          self.class.where(id: (ancestor_ids + ancestor_ids_...
                              ^
/usr/lib/ruby/gems/1.8/gems/ancestry-2.1.0/lib/ancestry/instance_methods.rb:77: syntax error, unexpected ')', expecting kEND
..._ids + ancestor_ids_was).uniq).each do |ancestor|

instance_methods中的实际代码是

触摸此记录的每个祖先

def touch_ancestors_callback

  # Skip this if callbacks are disabled
  unless ancestry_callbacks_disabled?

    # Only touch if the option is enabled
    if self.ancestry_base_class.touch_ancestors

      # Touch each of the old *and* new ancestors
      self.class.where(id: (ancestor_ids + ancestor_ids_was).uniq).each do |ancestor|
        ancestor.without_ancestry_callbacks do
          ancestor.touch
        end
      end
    end
  end
end

我将代码与。进行了比较 https://github.com/stefankroes/ancestry/blob/master/lib/ancestry/instance_methods.rb#L97 我不明白为什么我会收到这个错误。请帮帮我。

提前谢谢。

1 个答案:

答案 0 :(得分:1)

这个gem使用Ruby 1.9引入的散列的新语法。但是你使用Ruby 1.8运行这段代码并不理解这种语法。

您有两种选择:

  • 查找并使用旧版本的Gem,使用" old"句法。如果甚至存在一个版本取决于宝石的年龄。或

  • 升级到较新的Ruby版本。

我建议升级Ruby,因为1.8已经过时多年而且不再获得安全更新(阅读:https://www.ruby-lang.org/en/news/2013/12/17/maintenance-of-1-8-7-and-1-9-2/