Хороший вопрос. Всякий раз, когда вы видите переменную экземпляра в рельсах (начиная с @
), она обычно является битом представления/контроллера.
@stripe_cards = Stripe::Customer.retreive(self.stripe_customer_id).cards.all
Однако, глядя на хвостовом конце этого
Stripe::Customer.retreive(self.stripe_customer_id).cards.all
Это может соответствовать лучше не в модели, где вы можете повторное та же линия, но есть безопасность добавляемого обработки ошибок и предсказуемое поведение. Например,
# user.rb
def stripe_customer_cards
Stripe::Customer.retreive(self.stripe_customer_id).cards.all
rescue Stripe::InvalidRequestError
false # You could use this to render some information in your views, without breaking your app.
end
Также обратите внимание на использование self
. Обычно это подразумевает использование модели Rails, потому что вызов self
в контроллере фактически относится к контроллеру, что делает его практически бесполезным, если вы действительно не знаете, что делаете.
EDIT
Оказывать сообщение об ошибке, просто написать вызов для перенаправления или визуализации, с возможностью alert
.
if @stripe_cards = current_user.stripe_customer_cards
# Your being paid, sweet!
else
# Render alert info :(
render 'my_view', alert: 'This is an alert'
redirect_to other_path, alert: 'Another alert'
end
Я также хотел бы подчеркнуть, что вы не должны обрабатывать ошибки только потому, что можете. Не обрабатывайте ошибки, которых вы не ожидаете. Если обрабатывать ошибки вы не ожидаете, что будет
- пользователи путайте
- сделать ошибки в коде сложнее исправить
- Преувеличивайте время до признана ошибка
показать метод контроллера пользователя выглядит хорошо для меня – shiva
я бы, вероятно, положил аксессор на обычае, который принимает идентификатор пользователя и возвращает карты (то есть, если я правильно понимаю ваши модели). Затем в контроллере вам не нужно будет вызывать retreieve или cards.Кроме того, все это необходимо? – kddeisz
@ musicnerd47 Не могли бы вы рассказать о «аксессуре на таможне», о котором вы упомянули? Кроме того, я сейчас использую .all и знаю, что в конечном итоге могут возникнуть проблемы, но усомниться в том, что у пользователей может быть много действительных кредитных карт в файле :) –