У меня есть супер базовое приложение для электронной торговли с моделью пользователя, аутентифицированной с помощью модели Omniauth, модели продукта с именем и ценой, а также моделей ShoppingCart и ShoppingCartItem (с использованием жемчужины acts_as_shopping_cart
).Rails 4 Business Logic, авторизация - обновление цен на основе аутентификации
Моя проблема заключается в том, когда я аутентифицирую пользователя через поставщика Omniauth, я хочу предоставить скидки в зависимости от того, с кем они аутентифицируются.
Предположим, что они вступают в систему с facebook - тогда я хочу предоставить им скидку 20%. Я не уверен, как идти об этом на самом деле - я думаю, что я хочу написать эту бизнес-логику в моих продуктов и ShoppingCartItem моделей, устанавливая что-то вроде
def self.price
if current_user.provider == 'facebook'
super * 0.8
else
super
end
, но я не могу получить доступ к current_user
в модели потому, что он устанавливается сеансом.
Должен ли я делать это в контроллере, где у меня есть доступ к current_user? Тогда мне придется открыть классы Product и ShoppingCartItem внутри контроллеров, чтобы переопределить их ценовые методы, которые все чувствуют не так, и, честно говоря, я не знаю, будет ли это работать.
Я сделаю снимок. Только один вопрос - это не 'attr_accessor' устаревшая вещь, поскольку Rails 4 с сильными параметрами? Или вы здесь что-то обманываете? – uechan
@ tony- извините, это мой bad.it должен быть 'cattr_accessor: current_user' – Sontya
Интересный - не могли бы вы объяснить, что такое' cattr_accessor', которого я никогда раньше не видел? Я на самом деле нашел свое собственное решение, я продолжу и опубликую его :) – uechan