Как создать уведомление для подписчиков с помощью «Драгоценного камня уведомлений»

#ruby-on-rails #ruby

#ruby-on-rails #ruby

Вопрос:

Я пытаюсь настроить уведомления для подписчиков определенного пользователя, чтобы всякий раз, когда пользователь, на которого они подписаны, публикует главу, все подписчики пользователя будут получать уведомления. Я использую https://github.com/rails-engine/notifications .

Я реализовал следующие взаимосвязи, которые хорошо работают в моем приложении из этого руководстваhttps://www.devwalks.com/lets-build-instagram-with-ruby-on-rails-part-6-follow-all-the-people /

Это то, что я до сих пор делал с кодами

user.rb

   has_many :books, dependent: :destroy
  has_many :chapters, dependent: :destroy
  has_many :reviews, dependent: :destroy
  has_many :genres
  has_many :ratings
  

глава.rb

 belongs_to :book
belongs_to :user

after_commit :create_notifications, on: :create

private

def create_notifications
   Notification.create do |notification|
      notification.notify_type = 'chapter'
      notification.actor = self.book.user
      notification.user = self.user.followers
      notification.target = self
      notification.second_target = self.book
    end
end
  

просмотры / уведомления /_chapter.html.erb

 <div class=''>
  <%= link_to notification.actor.username, main_app.profile_path(notification.actor.username) %> published a new chapter to 
  <%= link_to notification.second_target.title, main_app.book_path(notification.second_target) %>
</div>

<div class=''>
  <% unless notification.target.blank? %>
    <%= link_to notification.target.title, main_app.book_chapter_path(notification.second_target, notification.target.id) %>
  <% end %>
</div>
  

book.rb

 belongs_to :user
has_many :chapters, dependent: :destroy
  

Когда я настроил уведомления на себя, я был уведомлен правильно, но когда я сделал это выше, я получил ошибку:

 User(#58266780) expected, got #<ActiveRecord::Associations::CollectionProxy [#<User id: 3, name: "Otunba Olusaga of Saganation", username: "saga", email: "officialklashe@gmail.com", created_at: "2019-03-26 11:59:16", updated_at: "2019-03-27 09:13:58", admin: false, bio: "">]> which is an instance of User::ActiveRecord_Associations_CollectionProxy(#58325780)
  

Дополнительные исследования показывают, что мне нужно «сопоставить подписчиков (или использовать инструмент пакетной вставки), чтобы вставить несколько уведомлений», что я не знаю, как сделать.

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

Ответ №1:

Я не уверен, что вы можете выполнить массовую вставку в этом случае, поскольку я понимаю, что драгоценному камню уведомлений нужно, чтобы каждое уведомление было для одного пользователя? Возможно, сделайте это…

 def create_notifications
   self.user.followers.each do |follower|
     Notification.create(notify_type: 'chapter', actor: self.book.user,
                         user: follower, target: self, second_target: self.book)

   end
end
  

Комментарии:

1. Сработало как нельзя лучше. У меня есть еще один вопрос, касающийся этого уведомления, как вы думаете, мне следует создать для него новый вопрос? @SteveTurczyn или есть способ спросить вас лично?

2. Лучше задать вопрос, поскольку таким образом другие могут извлечь выгоду.