我将尝试将rails-settings gem(https://github.com/100hz/rails-settings)实现到使用Ruby 1.8.7的Rails 3项目中。
设置和检索设置功能完美,但是如果我尝试获取特定用户的所有设置,则会出现错误。
因此,在“rails控制台”中,以下内容有效:
但是,如果我尝试获取所有设置:
我得到了以下错误信息:
这里有什么问题?还是这是1.8.7和1.9.2之间的差异?
设置和检索设置功能完美,但是如果我尝试获取特定用户的所有设置,则会出现错误。
因此,在“rails控制台”中,以下内容有效:
user = User.find(123)
user.settings.color = :red
user.settings.color
但是,如果我尝试获取所有设置:
user.settings.all
我得到了以下错误信息:
其中,settings.rb的第55行代码如下:NoMethodError: undefined method `merge' for []:Array
发生在 /[...]/.rvm/gems/ruby-1.8.7-p334/bundler/gems/rails-settings-883114dfd933/lib/rails-settings/settings.rb 的第55行:`all'
来自(irb):5
#retrieve all settings as a hash (optionally starting with a given namespace)
def self.all(starting_with=nil)
options = starting_with ? { :conditions => "var LIKE '#{starting_with}%'"} : {}
vars = thing_scoped.find(:all, {:select => 'var, value'}.merge(options))
result = {}
vars.each do |record|
result[record.var] = record.value
end
# line 55 is below this one...
@@defaults.select{ |k| k =~ /^#{starting_with}/ }.merge(result).with_indifferent_access
end
这里有什么问题?还是这是1.8.7和1.9.2之间的差异?
@@defaults
的初始化代码?这将有助于识别问题。看起来你那里有一个数组而不是哈希表。 - Roberto Decurnex