0

我有一个附在“部分”的“修订”上的评论表。如果不存在修订,则创建一个空修订。添加评论表单是用 ajax 加载的。问题是,如果在不刷新页面的情况下添加了多个评论,则会创建几个空修订。这在某些极端情况下会造成严重破坏。

每次点击添加评论按钮时,我都会请求一个带有 ajax 的新添加评论表单。但是,Rails 认为没有新信息,并且未修改服务 304。有新信息 - 第二个请求的评论表单应该有一个填充的“owner_id”,它是第一个评论创建的空修订的 id。

我很肯定 owner_id 人口的作用是刷新整个页面可以解决问题。我曾经认为这是一个服务器缓存问题,但查看请求的参数,owner_id 丢失,直到页面刷新。

更新:我将 expire_now() 添加到评论控制器的新操作中,它现在提供 200 响应,但内容仍然没有 owner_id。

另一个更新:查看控制台,请求的参数不包括 owner_id。刷新页面然后请求表单突然在参数中包含 owner_id。

4

1 回答 1

0

我仍然不确定这方面的细节,但是 ajax 请求在很多方面与页面请求不同。例如,仅在使用 ajax 请求视图时不会更新控制器代码。就我而言,没有 owner_id 作为 ajax 视图的填充参数也有区别。

在评论控制器的新操作中,我必须手动查询该部分以查看是否有修订,如果有,请将 owner_id 设置为修订 ID。

def new
  # precaution against creating multiple empty revisions if user adds multiple comments without refreshing page
  if params[:owner_id].nil?
    revision = @section.send(params[:snip_type]).first
    unless revision.nil?
      @comment.owner_id = revision.id
    end
  end
end
于 2013-06-05T19:33:04.857 回答