У меня проблема с ассоциациями, недоступными в моих представлениях.
Мои модели:
:user has_many :subscriptions
:subscription belongs_to :user
Я использую Devise для управления аутентификацией и т. Д. Для пользователей
Что я хотел бы сделать: при создании нового пользователя в процессе регистрации я также хочу создать подписку для этого пользователя.Поскольку Devise::RegistrationsController#new
по умолчанию не инициализирует связанную подписку, я создал собственную RegistrationsController
:
class RegistrationsController < Devise::RegistrationsController
def new
super
resource.subscriptions.build
logger.debug resource.subscriptions.inspect
end
end
Оператор отладки подтверждает, что объект Subscription
успешно создан:
[#<Subscription id: nil, user_id: nil, chargify_subscription_id: nil, chargify_product_handle: nil, created_at: nil, updated_at: nil>]
Проблема: в представлении resource.subscriptions
не существует.Если я проверю resource
в представлении, я получу объект User
, который включает в себя все свои собственные атрибуты, но не имеет ассоциаций (с ним должно быть связано subscriptions
)
debug(resource)
, что дает следующее:
--- !ruby/object:User
attributes:
name:
encrypted_password: ""
created_at:
updated_at:
last_sign_in_ip:
last_sign_in_at:
sign_in_count: 0 last_name:
current_sign_in_ip:
reset_password_token:
current_sign_in_at:
remember_created_at:
reset_password_sent_at:
chargify_customer_reference:
first_name:
email: ""
attributes_cache: {}
changed_attributes: {}
destroyed: false
marked_for_destruction: false
new_record: true
previously_changed: {}
readonly: false
Есть ли что-то, чего мне не хватает, или, может быть, есть что-то странное в механизме resource
, используемом Devise, который препятствует доступу ассоциаций в представлении?
Спасибо!
Редактировать: если я просто добавлю resource.subscriptions.build
в моем представлении, прежде чем переписать форму, это будет работать нормально.Но я думаю, что такая логика принадлежит контроллеру, а не представлению, и я хотел бы знать, что удерживает меня от возможности поместить ее туда.