Я пытаюсь создать поток, в котором пользователь может просмотреть обзор / описание информационного бюллетеня, а затем заполнить форму со своим адресом электронной почты и подписаться. В частности, потенциальный подписчик должен:
- перейти к
newsletters/:id/overview
и увидеть обзор информационного бюллетеня - Заполнить форму своим адресом электронной почты и подписаться
- И тогда будут созданы новые
Subscriber
(id, email) и новые Subscription
(id, subscriber_id, newsletter_id).
Учитывая, что этот поток пересекает три разные модели, я пытаюсь выяснить «правильный / лучший» способ создания Subscriber
и Subscription
. Я застрял в том, что сейчас у меня есть запрос из формы на действие newsletter#subscribe
, но сейчас мне интересно, должен ли я:
- Создать подписчика и подписку напрямую внутри метода
- Вызов методов
subscriber#create
и subscription#create
(из того, что я читал, вызывать действия через контроллеры не рекомендуется) - Создание модулей для создания подписчика и подписка (не делал этого раньше, но несколько потоков Stackoverflow обсуждают это)
- Вместо этого используйте запрос формы go на
subscriber#create
действие - Или что-то еще?
Вот некоторые файлы:
информационные бюллетени / обзор. html .erb
<h2>Subscribe:</h2>
<%= form_with scope: :subscriber, url: newsletter_subscribe_path do |form| %>
<p>
<%= form.label :email %><br>
<%= form.text_field :email %>
</p>
<p>
<%= form.submit %>
</p>
<% end %>
newsletters_controller.rb
class NewslettersController < ApplicationController
def subscribe
# ???
end
end
Одно примечание: В настоящее время у меня нет маршрутов subscription
, вложенных в subscriber
или newsletter
, поскольку они относятся к обоим. Я не уверен, упростит ли это изменение.
РЕДАКТИРОВАТЬ:
newsletter.rb
class Newsletter < ApplicationRecord
belongs_to :publisher
has_many :posts
has_many :subscriptions
end
subscriber.rb
class Subscriber < ApplicationRecord
has_many :subscriptions
end
subscription.rb
class Subscription < ApplicationRecord
belongs_to :subscriber
belongs_to :newsletter
end