Я потратил немного времени на изучение кода. Мне кажется, что что-то вроде этого (предупреждение: скорее всего, не будет работать, так как я ещё не пробовал) позволит пользователю опубликовать ответ, указав только адрес электронной почты. Буду благодарен за любые ваши комментарии.
Особенно я не уверен, что это лучший способ создания «промежуточного» (staged) пользователя. Я не нашёл метода, который бы специально создавал таких пользователей.
class SomePluginController < ApplicationController
# Убедиться, что в базе данных есть промежуточный пользователь
def ensure_user
# Проверить, существует ли промежуточный пользователь
user = User.where(staged: true).with_email(params[:email].strip.downcase).first
# Создать промежуточного пользователя вручную
if !user
user = User.new
user.staged = true
user.email = params[:email]
user.active = false
user.save!
end
user
end
# Подписаться на тему как промежуточный пользователь
def staged_watch
user = ensure_user
topic = Topic.find(params[:topic_id].to_i)
TopicUser.change(user, topic.id, notification_level: params[:notification_level].to_i)
end
# Ответить на тему как промежуточный пользователь
def staged_reply
user = ensure_user
manager = NewPostManager.new(user,
raw: params[:body],
topic_id: params[:topic_id])
result = manager.perform
end
end