【发布时间】:2010-12-04 07:20:15
【问题描述】:
所以,这是我的问题:
我有一个带有照片和用户的 Rails 3 应用程序。用户有_许多照片。照片可以被其他用户投票“赞成”或“反对”。有一个 Vote 模型可以处理这个问题。用户有很多票(每张照片一张),照片有很多票(每张用户一张),在双向 has_many :through 关系中。
为了允许赞成/反对投票,我有一个通过 ajax 提交的表单。表单功能很好,但是我遇到了一个我不太明白的问题。
当用户第一次访问一张照片时,该用户还没有投过赞成票或反对票,因此对于这张照片,该用户没有“投票”对象。因此,允许用户投票的部分表单将发送“创建”请求。
此请求由 ajax 处理。它工作正常,并且在投票时更新照片的统计信息(通过 ajax)。
用户还可以更改他们的投票。如果用户在看到编辑投票的表单之前访问了他们投票的照片。他们可以根据需要多次更改投票,并且页面会通过 ajax 更新。
问题是这样的:
在用户第一次投票后,表单需要更新,以便不再尝试创建新投票,而是编辑现有的、刚刚创建的投票。这目前不起作用。
如果用户第一次投票,然后改变主意,表单将不会响应,因为它仍然设置在 HTML 中发送“创建”请求,并且模型不允许用户创建超过每张照片一票。
所以问题是,来自表单的 ajax 请求需要更新表单,而不仅仅是照片统计信息。
我的“create.js.erb”代码如下:
$(function () {
$('table#content_score').replaceWith("<%= escape_javascript(render :partial => 'stats') %>");
$('form.vote_ballot').replaceWith("<%= escape_javascript(render :partial => 'ballot') %>");
});
应该发生的是刷新 vote_ballot 表单 - 因此从“新”变为“编辑”。如果您刷新页面,则会发生这种情况,但如果您通过 AJAX 创建新投票则不会。但是,初始点击确实会刷新统计信息(第一行,替换 'table#content_score')。
那么,有什么想法或建议吗?
在使用 ajax 创建内容时,如何让表单从“新建”变为“编辑”?我错过了什么?
谢谢!
【问题讨论】:
标签: jquery ruby-on-rails ajax forms ruby-on-rails-3