如何使用Synchromesh和ReactiveRecord

时间:2016-08-23 10:29:41

标签: react.rb

如何让Synchromesh更新反应记录关联?

如果您考虑以下型号:

# 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

我看到的行为是对Post或Comment的任何更新都被正确地推送到客户端,并且组件正确地呈现更新。

但是,如果创建了一个新的Thing(对于正在渲染的Todo),新记录将作为推送通知到达,但事物列表不会动态更新。 (页面刷新会渲染新的东西)。

我尝试过向Todo添加一个范围,但这并没有什么区别。

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

让ReactiveRecord和Synchromesh识别属于Todo的新东西的最佳方法是什么?

1 个答案:

答案 0 :(得分: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

这一切都有效。