升级到Rails 4.1获取错误:ArgumentError:未知密钥:: order

时间:2014-09-12 23:21:37

标签: ruby-on-rails ruby activerecord upgrade

我正处于升级过程中,遇到了一些问题。

这是我的错误:

  

/Users/jay/.rbenv/versions/2.1.2/lib/ruby/gems/2.1.0/gems/activesupport-4.1.6/lib/active_support/core_ext/hash/keys.rb:71:in   `block in assert_valid_keys':未知密钥::订单。有效密钥是:   :class_name,:class,:foreign_key,:validate,:autosave,:table_name,   :before_add,:after_add,:before_remove,:after_remove,:extend,   :primary_key,:dependent,:as,:through,:source,:source_type,   :inverse_of,:counter_cache,:join_table(ArgumentError)

是否与我的示波器有关?例如:

scope :total_views, order('total_views DESC')

default_scope { order: :sort_order }

scope :recent, order: 'created_at desc'

我有一堆使用顺序的范围,发生了什么?

3 个答案:

答案 0 :(得分:2)

Rails 4中的命名范围现在使用lambdas而不是哈希。在lambda中使用新的查询语法而不是旧的哈希语法:

default_scope { order(:sort_order) } 

scope :total_views, -> { order('total_views DESC') }
scope :recent,      -> { order('created_at DESC') }

了解有关ActiveRecord查询的更多信息:http://edgeguides.rubyonrails.org/active_record_querying.html#scopes

答案 1 :(得分:0)

您的范围必须采用lambda的形式。

scope :total_views, -> { order('total_views DESC') }

default_scope -> { order: :sort_order }

scope :recent, -> { order: 'created_at desc' }

答案 2 :(得分:0)

我将acts_as_tree升级到版本2.1.0,问题就消失了。