如何让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的新东西的最佳方法是什么?
答案 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
这一切都有效。