我有以下类型:
type IPFilePair struct {
IP net.IP
FileName string
}
type IPFilePairs []*IPFilePair
Run Code Online (Sandbox Code Playgroud)
我正在尝试编组使用json.Marshal(sample_ipfilepairs)它的JSON,但因为IP它不是一个字符串,它将它变成一些奇怪的东西.
将此输出的JSON IP作为字符串的正确方法是什么?
我刚刚将Rails应用程序从Rails 2.3.8升级到Rails 3.2.7,我遇到了Activerecord的问题.
如果我尝试使用Activerecord访问我的数据库(例如:Employee.last),我会收到以下错误:
NoMethodError: undefined method `accept' for nil:NilClass
from /home/aneyer/.rvm/gems/ruby-1.8.7-p370@rails3/gems/activerecord-3.2.7/lib/active_record/connection_adapters/abstract/database_statements.rb:7:in `to_sql'
from /home/aneyer/.rvm/gems/ruby-1.8.7-p370@rails3/gems/activerecord-3.2.7/lib/active_record/connection_adapters/abstract/database_statements.rb:18:in `select_all'
from /home/aneyer/.rvm/gems/ruby-1.8.7-p370@rails3/gems/activerecord-3.2.7/lib/active_record/connection_adapters/abstract/query_cache.rb:63:in `select_all'
from /home/aneyer/.rvm/gems/ruby-1.8.7-p370@rails3/gems/activerecord-3.2.7/lib/active_record/querying.rb:38:in `find_by_sql'
from /home/aneyer/.rvm/gems/ruby-1.8.7-p370@rails3/gems/activerecord-3.2.7/lib/active_record/explain.rb:40:in `logging_query_plan'
from /home/aneyer/.rvm/gems/ruby-1.8.7-p370@rails3/gems/activerecord-3.2.7/lib/active_record/querying.rb:37:in `find_by_sql'
from /home/aneyer/.rvm/gems/ruby-1.8.7-p370@rails3/gems/activerecord-3.2.7/lib/active_record/relation.rb:171:in `exec_queries'
from /home/aneyer/.rvm/gems/ruby-1.8.7-p370@rails3/gems/activerecord-3.2.7/lib/active_record/relation.rb:160:in `to_a'
from /home/aneyer/.rvm/gems/ruby-1.8.7-p370@rails3/gems/activerecord-3.2.7/lib/active_record/explain.rb:33:in `logging_query_plan'
from /home/aneyer/.rvm/gems/ruby-1.8.7-p370@rails3/gems/activerecord-3.2.7/lib/active_record/relation.rb:159:in `to_a'
from /home/aneyer/.rvm/gems/ruby-1.8.7-p370@rails3/gems/activerecord-3.2.7/lib/active_record/relation/finder_methods.rb:378:in `find_first'
from /home/aneyer/.rvm/gems/ruby-1.8.7-p370@rails3/gems/activerecord-3.2.7/lib/active_record/relation/finder_methods.rb:122:in `first'
from /home/aneyer/.rvm/gems/ruby-1.8.7-p370@rails3/gems/activerecord-3.2.7/lib/active_record/relation/finder_methods.rb:336:in `find_one'
from /home/aneyer/.rvm/gems/ruby-1.8.7-p370@rails3/gems/activerecord-3.2.7/lib/active_record/relation/finder_methods.rb:312:in `find_with_ids'
from /home/aneyer/.rvm/gems/ruby-1.8.7-p370@rails3/gems/activerecord-3.2.7/lib/active_record/relation/finder_methods.rb:107:in `find'
from /home/aneyer/.rvm/gems/ruby-1.8.7-p370@rails3/gems/activerecord-3.2.7/lib/active_record/querying.rb:5:in `__send__'
from /home/aneyer/.rvm/gems/ruby-1.8.7-p370@rails3/gems/activerecord-3.2.7/lib/active_record/querying.rb:5:in `find'
Run Code Online (Sandbox Code Playgroud)
我在Ruby 1.8.7中使用Rails 3.2.7.我以前使用的是mysql 2.7版本,但在升级时遇到了错误,所以我现在使用的是mysql2(0.311)以及activerecord-myql2-adapter(0.0.3).
问题似乎与此类似:
Rails 3:Model.all => NoMethodError:未定义的方法'accept'代表nil:NilClass
但我尝试了那里提出的所有解决方案,但没有一个能够奏效.
编辑:如果我拿出'activerecord-mysql2-adapter'gem,我会收到以下错误.
Address Load (0.7ms) SELECT `addresses`.* FROM `addresses` LIMIT …Run Code Online (Sandbox Code Playgroud) 在ruby中,对于许多类,您可以确保拥有正确的类,或者在某些情况下使用类似于以下的代码转换类.
Hash({a: 3}) #=> {a: 3}
Hash(3) #=> TypeError
Run Code Online (Sandbox Code Playgroud)
但是,如果您从地图或其他内容中获取类,则此方法无效.例如,以下代码引发语法错误
type_map = {class: Hash}
type_map[:class]({a: 3}) #=> Unexpected '(', expecting ')'
Run Code Online (Sandbox Code Playgroud)
就像这样:
klass = Hash
klass({a: 3}) #=> NoMethodError: undefined method klass for main:Object
Run Code Online (Sandbox Code Playgroud)
有人知道这样做的方法吗?