#ruby-on-rails #ruby-on-rails-4
#ruby-on-rails #ruby-on-rails-4
Вопрос:
Я все еще новичок в Rails, и когда я начинаю изобретать вещи, я знаю, что делаю это не так, как Rails 😉
Как вы решаете следующую проблему, не повторяясь и следуя соглашению Rails?
Пользователи в моем приложении могут отправлять сообщения друг другу. Они могут сделать это при просмотре объявления, которое кто-то продает, в форме, расположенной в разделе просмотр объявления: /listing/X
Но также они могут отправлять сообщения друг другу после покупки объявления в форме, найденной, например, на: /admin/payments/Y
Я решил эту проблему, разместив формы в листинге и контроллерах платежей соответственно в сообщении о действии. Чтобы иметь действие, отличное от CRUD, я добавил участника в routes.rb:
resources :listings, :payments do
member do
post 'messaging'
end
end
Таким образом, у обоих контроллеров есть действия, к которым я могу ОПУБЛИКОВАТЬ свою форму сообщения, а затем в методе обмена сообщениями я создаю сообщение hte, используя Message.new и т.д.
Работает как шарм, но я подумал, что должен быть лучший способ, например, опубликовать обе формы в отдельном MessagesCottroller::create
методе?
Кроме того, может быть, мне следует извлечь логику обмена сообщениями в проблему и включить ее в ListingsController
, PaymentsController
или любой другой контроллер, который должен «обрабатывать» новые сообщения, поскольку он не работает таким образом?
Еще одна вещь… belongs_to
Поэтому я создал все сообщения ConversationsController
, которые служат в качестве папки «Входящие» для всех разговоров для каждого пользователя, где я использую только действия index и show для перечисления всех разговоров и отображения каждого разговора соответственно. Когда пользователь открывает /conversation / X, он видит все сообщения и форму для ответа. Как вы можете видеть, пользователь отправляет не беседу, а сообщение.
Итак, принимая во внимание, что сообщение принадлежит к conversation_to, сообщение отправляется через формы, найденные в listing / x, payment / Y или conversation / X, должен ли я решать это с помощью:
- добавление MessagesController и отправка каждой формы непосредственно в нее, а затем перенаправление bak в список view s / x, payment / y или conversation / z?
- Сохраняя создание сообщений в каждом контроллере отдельно и, возможно, используя concern, чтобы немного ВЫСУШИТЬ его?
Большое вам спасибо
Комментарии:
1. У вас уже есть решение. Создайте MessagesController, опубликуйте его, создайте сообщение, а затем перенаправьте обратно туда, где вам нужно быть. Вы не должны создавать сообщения в нескольких местах.
2. В итоге я сделал именно это, потому что подумал о чистом RESTful, где создание сообщения должно быть за отправкой в URI / messages, а не за списками / сообщениями или платежами / сообщениями … 🙂 спасибо за подтверждение!