Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 活动记录类抛出';方法u缺失';将对象值指定给已声明的二进制属性时_Ruby_Activerecord - Fatal编程技术网

Ruby 活动记录类抛出';方法u缺失';将对象值指定给已声明的二进制属性时

Ruby 活动记录类抛出';方法u缺失';将对象值指定给已声明的二进制属性时,ruby,activerecord,Ruby,Activerecord,我在rails之外使用Active Record,我有两个类似于以下的AR类: class Building < ActiveRecord::Base has_many :rooms serialize :current_room, Room 我认为这是因为object属性没有将其视为Room对象,这是可以理解的,但我认为serialize方法解决了这个问题d.current_room.class和d.rooms.first.class两个返回房间作为对象类。有没有一种方法可

我在rails之外使用Active Record,我有两个类似于以下的AR类:

class Building < ActiveRecord::Base
   has_many :rooms
   serialize :current_room, Room

我认为这是因为object属性没有将其视为Room对象,这是可以理解的,但我认为serialize方法解决了这个问题
d.current_room.class
d.rooms.first.class
两个返回房间作为对象类。有没有一种方法可以在不覆盖赋值方法的情况下使其正常工作?

我将具体回答您的错误消息。我通常发现,如果我仔细阅读错误消息,它通常会准确地告诉我什么是错误的。所以在这种情况下

NoMethodError: undefined method `gsub' for #<Room:0x1f6c260>

所以我不认为二进制和字符串有什么问题。我会查看您的代码并搜索
gsub
,以查看问题的确切位置。另外,
gsub
通常在字符串上调用。

Serialize用于字符串列类型,而不是二进制文件。当列类型更改为字符串时,一切正常。

发布后我立即想到序列化是针对文本列类型的,当我尝试这样做时,成功了。不过,这似乎仍然违反直觉。如果我可以在文本中序列化内容,为什么我会使用二进制?仅供参考-如果这是您问题的答案,那么您可以(并且被鼓励)将其作为下一个遇到此问题的人的答案,并找到您的问题。你可以在24小时后接受自己的答案。是的,这是一个问题,但我认为这是一个无关的问题,是由于试图以不适当的方式做某事造成的。我检查了我的代码,我没有单独给gsub打电话。它可能在错误响应的第三行引用的
二进制\u to_字符串中被调用。
irb(main):006:0> d.current_room = d.rooms.first
NoMethodError: undefined method `gsub' for #<Room:0x1f6c260>
    from C:/Ruby192/lib/ruby/gems/1.9.1/gems/activemodel-3.1.1/lib/active_model/attribute_methods.rb:385:in `method_missing'
    from C:/Ruby192/lib/ruby/gems/1.9.1/gems/activerecord-3.1.1/lib/active_record/attribute_methods.rb:60:in `method_missing'
    from C:/Ruby192/lib/ruby/gems/1.9.1/gems/activerecord-3.1.1/lib/active_record/connection_adapters/sqlite_adapter.rb:24:in `binary_to_string'
    from C:/Ruby192/lib/ruby/gems/1.9.1/gems/activerecord-3.1.1/lib/active_record/connection_adapters/column.rb:84:in `type_cast'
    from C:/Ruby192/lib/ruby/gems/1.9.1/gems/activerecord-3.1.1/lib/active_record/attribute_methods/dirty.rb:89:in `field_changed?'
    from C:/Ruby192/lib/ruby/gems/1.9.1/gems/activerecord-3.1.1/lib/active_record/attribute_methods/dirty.rb:63:in `write_attribute'
    from C:/Ruby192/lib/ruby/gems/1.9.1/gems/activerecord-3.1.1/lib/active_record/attribute_methods/write.rb:14:in `current_room='
    from (irb):6
    from C:/Ruby192/bin/irb:12:in `<main>'
NoMethodError: undefined method `gsub' for #<Room:0x1f6c260>
room_instance.gsub('something', 'else')