В идеале данные, доступные для контроллера, должны передаваться в качестве параметра в методы модели.Поэтому я советую вам посмотреть, можно ли переписать ваш код.Но вот два возможных решения вашей проблемы.Я предпочитаю более поздний подход, поскольку он является общим.
Подход 1: Объявите виртуальный атрибут
class CardSignup
attr_accessor call_context
def call_context
@call_context || {}
end
end
В коде вашего контроллера:
def create
cs = CardSignup.new(...)
cs.call_context = params
if cs.save
# success
else
# error
end
end
В вашей модели CardSignup:
def credit_status_on_create
Organization.find(self.organization_id).update_credits(call_context)
end
Обновите модель организации.Обратите внимание на изменение логики подсчета.
def update_credits
@organization = Organization.find(call_context[:id])
credit_count = @organization.card_signups.count(:conditions =>
{:credit_status => true})
end
Подход 2: Объявите локальную переменную потока, доступную для всех моделей
Код вашего контроллера:
def create
Thread.local[:call_context] = params
cs = CardSignup.new(...)
if cs.save
# success
else
# error
end
end
Обновление модели Organization
.Обратите внимание на изменение логики подсчета.
def update_credits
@organization = Organization.find((Thread.local[:call_context] ||{})[:id])
credit_count = @organization.card_signups.count(:conditions =>
{:credit_status => true})
end