Rails повторяет сообщение модератору или администратору - зависит от даты созданного - PullRequest
0 голосов
/ 16 февраля 2020

Мое приложение в настоящее время просто отображает сообщение, которое клиент получил после подачи заявки на продукт. Я хочу дать клиенту возможность ответить на исходное сообщение от модератора и сохранить его в своем почтовом ящике (почтовый ящик модератора). Однако, если исходное сообщение от модератора старше 3 дней, сообщение должно быть перенаправлено администратору и сохранено в его почтовом ящике (входящие сообщения администратора).

Приложение имеет 4 модели:

user.rb

class User < ApplicationRecord
  has_one :inbox
  has_one :outbox
  has_many :messages

  scope :client, -> { where(is_client: true) }
  scope :admin, -> { where(is_admin: true) }
  scope :moderator, -> { where(is_moderator: true) }
end

message.rb

class Message < ApplicationRecord
  belongs_to :inbox
  belongs_to :outbox
end

Когда пользователь отправляет сообщение, оно отправляется в его почтовый ящик и в почтовый ящик получателя:

inbox.rb

class Inbox < ApplicationRecord
  belongs_to :user
  has_many :messages
end

outbox.rb

class Outbox < ApplicationRecord
  belongs_to :user
  has_many :messages
end

Я пытаюсь что-то вроде этого:

MessagesController.rb

def show
  @message = Message.find(params[:id])
end

def new
  @message = Message.new
end

def create

  @message = Message.create(
  if current_user.message.created_at > 3.days.ago
    outbox: moderator.outbox
  else
    outbox: admin.outbox
  end
)
end

Если я предполагаю, что у меня только один модератор и один клиент, должен ли я создать еще один контроллер для перехвата этого сообщения, на которое я хочу ответить?

1 Ответ

0 голосов
/ 17 февраля 2020

при условии, что в почтовом ящике пользователя есть ссылка для ответа на исходное сообщение

= link_to 'Reply', new_message_path(message_id: orignal_message_id_goes_here)

message_id будет передано в виде строки запроса

= form_for @message do |f|
  = hidden_field_tag :original_message_id, params[:message_id]
  ...

при этом будет отправлено original_message_id с данные формы

def create
  orignal_message = current_user.inbox.messages.find_by(id: params[:original_message_id])

  inbox = if orignal_message.created_at > 3.days.ago 
             orignal_message.moderator.inbox
          else
             # find admin and get inbox
          end

  @message = Message.create(
    inbox: inbox
    body: params[:message][:body]
  )
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...