Rails:在AJAX提交后形成部分不清除/重新加载

时间:2013-08-04 05:17:41

标签: javascript jquery ruby-on-rails ruby ajax

我正在尝试创建一个页面/视图应用程序。我有一个我提交的表单,它创建了一个简单的推文对象:

_form.html.erb

<div id="schedule-tweet-form">
  <%= simple_form_for @tweet, :remote => true do |f| %>
    <%= f.input :text, :input_html => {:cols => 60, :rows => 6} %>
    <%= f.input :scheduled_time %>
    <%= f.button :submit, "Schedule Tweet", :class => "f-button" %>
  <% end %>
</div>

(scheduled_time是日期时间类型,有多个选择框)

表单提交工作正常,并在我的数据库中创建一行没有问题。问题是,在提交后,表单中的数据不会被清除。推文的文本仍在输入文本框中,预定时间仍然选择了相应的选择框。

这是我的控制器:

tweets_controller.rb

class TweetsController < ApplicationController
  def index
    @tweet = Tweet.new
  end

  def create
    @tweet = Tweet.new(params[:tweet])
    @tweet.user = current_user

    respond_to do |format|
      if @tweet.save
        @tweet.tweet_at_scheduled_time
        flash[:notice] = "Tweet has been scheduled"
        format.html { render 'index' }
        format.js
      else
        format.html { render 'index' }
        format.js { render 'reload' }
      end
    end
  end
end

以下是渲染部分的视图:

index.html.erb

<div id="schedule-tweet-form-container">
  <%= render 'form' %>
</div>

我尝试使用一些jQuery删除表单,并在提交表单并调用create操作后重新呈现一个新表单,但奇怪的是,表单在调用“append”后返回提交的推文信息(输入字段中的text&amp; scheduled_time数据。)

create.js.erb

<% if @tweet.save %>
  $("#schedule-tweet-form").remove();
  $('#schedule-tweet-form-container').append("<%= j render 'form' %>");
<% end %>

在过去的几个小时里,我一直在绞尽脑汁,没有其他任何我尝试过的各种其他堆栈溢出问题都有效。我很感激帮助。

2 个答案:

答案 0 :(得分:3)

在您的创建操作中,保存推文后,您需要再次初始化Tweet对象。

但是在你的create.js.erb中你使用了@tweet,所以修改代码如下

<% if @tweet.save 
     @tweet = Tweet.new
%>

  $("#schedule-tweet-form").remove();
  $('#schedule-tweet-form-container').append("<%= j render 'form' %>");
<% end %>

答案 1 :(得分:-1)

你应该使用

    format.json 

on ajax calls

检查这个帖子的以下答案,使简单的表格成为一个json帖子

Is there a way to submit ajax/json requests with simple_form for Rails