Как получить доступ к значению столбца после сериализации activerecord

У меня есть простая модель:

class User < ActiveRecord::Base
  serialize :preferences
end

Я хочу получить исходное значение из mysql, а не значение перед сериализацией. Возможно ли это?

Я знаю, что могу использовать

ActiveRecord::Base.connection.execute("select * from users")

Но я хочу получить доступ к модели User.

Ответ 1

Обновление

Хорошо, это то, что вы ищете:

User.find(params[:id]).attributes_before_type_cast["preferences"][:value]

Это вернет строку в ее сериализованной форме.

Это самое близкое, что вы можете получить, которое я могу найти, это не сработает, если вы уже получили объект, вытащенный из базы данных.

Извините за неправильное понимание вашего вопроса. Вы также можете использовать это из модели пользователя.

Оставив старый ответ на всякий случай, другой способ сделать это кому-то полезен.

Старый ответ

Просто, чтобы понять, что я понимаю, вы хотите, чтобы необработанные данные из таблицы. Данные, которые рельсы сериализуются и помещаются в базу данных.

EX. Вы помещаете в ['site_id','last_update','last_restart'], и получаете "---\n- site_id\n- last_update\n- last_restart\n", и он помещается в базу данных и сохраняется. Вы хотите получить это: "---\n- site_id\n- last_update\n- last_restart\n" из базы данных.

Хорошо, это потребовало некоторой фанатации из базы данных, но вы можете сделать это так.

В проекте у меня есть сериализованный вызов массива devise_table_preferences, в котором перечислены предпочтения для отображения в таблице в определенном порядке, например:

user.devise_table_preferences = ['site_id','last_update','last_restart']

Сериализованное представление выглядит так:

"---\n- site_id\n- last_update\n- last_restart\n"

Используя ваш метод выше, я сделал такой запрос:

preference = ActiveRecord::Base.connection.execute("SELECT devise_table_preferences FROM users WHERE id = #{@user.id}")

Он возвращает объект в консоли следующим образом:

preference = #<Mysql2::Result:0x007fe4cdf34850> 

Запуск:

preference.first[0]

Дайте мне это:

"---\n- site_id\n- last_restart\n"

Я знаю, что это большая работа, но она определенно даст вам ваши данные в сериализованном виде. Надеюсь, что это поможет вам.

Ответ 2

Думаю, в эти дни вы хотите сказать следующее:

User.find(PARAMS [: идентификатор]). Typecasted_attribute_value ( 'предпочтения')