Сериализованный столбец всегда сохраняется как нулевой в Rails - PullRequest
0 голосов
/ 27 марта 2011

Все, что я пытаюсь сделать, это сохранить двумерный хэш в столбце базы данных в приложении 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

в моей модели и его столбец в таблице базы данных.объявлен с типом «текст».Любые указатели сделают меня очень счастливым человеком.

- Крис

Ответы [ 2 ]

1 голос
/ 27 марта 2011
  1. 'serialize' - это метод.
  2. Hash.new { |h, k| h[k] = Hash.new { |h1, k1| h1[k1] =0 }} => {}
  3. Пожалуйста, предоставьте тестовые данные, которые вы используете для хэшей.
0 голосов
/ 27 марта 2011

Избавиться от ":" перед сериализацией:

class Model < ActiveRecord::Base
  serialize :hash_field

end
...