2

你如何让 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),新记录将作为推送通知到达,但事物列表不会动态更新。(页面刷新会呈现新事物)。

我曾尝试向 Todo 添加范围,但这并没有什么不同。

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

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

4

1 回答 1

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

这样就可以了。

于 2016-08-23T11:16:39.923 回答