Spree commerce - Редактировать свойства объекта пользователя

Я новичок в веселье, а также все еще изучаю Rails

Я не совсем понимаю, как я могу добавить новые свойства в объект Spree::User, чтобы я мог установить больше данных для пользователей, которые регистрируются на моем сайте.

По не очень понятной документации понимаю, что надо создать класс User и добавить настройки:

class User < ActiveRecord::Base
  preference :hot_salsa, :boolean
  preference :dark_chocolate, :boolean, :default => true
  preference :color, :string
  preference :favorite_number, :integer
  preference :language, :string, :default => "English"
end

Но я не уверен, где мне сохранить этот файл или как его вообще назвать.

Я на правильном пути?


person htafoya    schedule 05.03.2016    source источник
comment
ИМХО Эта часть хорошо документирована. guides.spreecommerce.com/developer/logic.html#extending-classes Вы создаете класс migraton, eval и изменяете или расширяете представления, как указано в ссылке @Saurabh   -  person Jakub    schedule 05.03.2016


Ответы (2)


Это можно сделать с помощью декоратора. Вы можете создать декоратор как app/models/spree/user_decorator.rb и добавить в него свой код.

Spree::User.class_eval do
  preference :hot_salsa, :boolean
  preference :dark_chocolate, :boolean, :default => true
  preference :color, :string
  preference :favorite_number, :integer
  preference :language, :string, :default => "English"
end

Найдите документацию по переопределению или расширению кода здесь.

person Saurabh    schedule 05.03.2016

Поля, которые вы добавляете, не должны использоваться в качестве предпочтений, поскольку значение для предпочтений сериализуется, а затем сохраняется, что будет бесполезно, если вы хотите выполнить некоторую фильтрацию/запрос в этих полях.

Скорее это должны быть

  • отдельные атрибуты пользовательской модели (столбцы spree_users таблицы).
  • атрибуты отдельной новой таблицы могут быть spree_user_details (belongs_to :user) с ассоциацией has_one из пользовательской модели.
person Priyank Gupta    schedule 29.03.2016