【问题标题】:serialized column always saved as null in Rails序列化列在 Rails 中始终保存为 null
【发布时间】:2011-07-23 20:07:41
【问题描述】:

我要做的只是在 Ruby on Rails 应用程序的数据库列中保存一个二维哈希。我只是在学习如何使用框架,这个任务让我很伤心。我已尽力不犯任何愚蠢的错误,尽管我相信我的问题源于一个错误。

所以我要做的是在控制器中创建哈希并将其设置为对象中字段的值,然后调用 save。

代码:

@instance = Model.find(:first, :conditions => "id = 1"}

@instance.hash_field = Hash.new { |h, k| h[k] = Hash.new { |h1, k1| h1[k1] =0 }} 

@instance.other_field = "some string"

@instance.save

other_field 将保存其新值,并且该值在后续从数据库中检索时保持不变。当我再次将实例从数据库中拉出时,'hash_field' 将始终重置为零。尽管 '@instance.hash_field' 的值在控制器和视图中具有正确的值,但仍会发生这种情况。这让我有信心说将哈希保存到数据库是一个问题。

我有声明

:serialize :hash_field

在我的模型中,它在数据库表中的列被声明为“文本”类型。任何指点都会让我成为一个非常快乐的人。

-克里斯

【问题讨论】:

  • 您可能想要这样做:@instance.hash_field = {:k => {:k1 => 0}} ,因为您的语句返回的是空哈希。

标签: ruby-on-rails ruby database serialization hash


【解决方案1】:
  1. 'serialize' 是一种方法。
  2. Hash.new { |h, k| h[k] = Hash.new { |h1, k1| h1[k1] =0 }} => {}
  3. 请提供您用于哈希的测试数据。

【讨论】:

    【解决方案2】:

    去掉serialize前面的“:”:

    class Model < ActiveRecord::Base
      serialize :hash_field
    
    end
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多