Как ассоциации обновляются с помощью 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
И с этим все это работает.