Как ассоциации обновляются с помощью Synchromesh и ReactiveRecord

Как вы получаете Synchromesh для обновления связей Reactive Record?

Если вы рассматриваете следующую модель:

# models/public/post.rb
class Post < ActiveRecord::Base
  has_many :comments
end

# models/public/comments.rb
class Comment < ActiveRecord::Base
  belongs_to :post
end

И компонент, который отображает все сообщения и комментарии:

def render
  ul do
  Todo.all.each do |todo|
    li { todo.title }
    ul do
      todo.things.each do |thing|
        li { thing.name }
      end
    end
  end
end

Поведение, которое я наблюдаю, заключается в том, что любое обновление сообщения или комментария правильно отправляется клиенту, и компонент корректно отображает обновление.

Однако, если создается новая вещь (для рендеринга Todo), новая запись поступает в виде push-уведомления, но список вещей не обновляется динамически. (Обновление страницы отображает новую вещь).

Я попытался добавить область для Todo, но это не имеет значения.

scope :all_with_things, -> () { joins(:things) }, [Thing]

Каков наилучший способ заставить ReactiveRecord и Synchromesh распознать новую вещь, принадлежащую Todo?

1 ответ

Я думаю, что я разработал ответ. Вам нужно использовать область при отображении коллекции.

Итак, в модели:

# models/public/comments.rb
class Comment < ActiveRecord::Base
  belongs_to :post
  scope :for_post, -> (post_id) { where(post_id: post_id)  }
end

А потом при рендеринге коллекции:

Todo.all.each do |todo|
    li { todo.title }
    ul do
      Comment.for_post(post.id).each do |comment|
        li { comment.body }
    end
  end
end

И с этим все это работает.

Другие вопросы по тегам