3

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

_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”后表单返回了提交的推文信息(文本和 schedule_time输入字段中的数据)。

创建.js.erb

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

在过去的几个小时里,我一直在为此绞尽脑汁,但我从其他各种堆栈溢出问题中尝试过的其他方法都没有奏效。我很感激帮助。

4

2 回答 2

3

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

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

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

  $("#schedule-tweet-form").remove();
  $('#schedule-tweet-form-container').append("<%= j render 'form' %>");
<% end %>
于 2013-08-04T05:27:27.900 回答
-1

你应该使用

    format.json 

关于 ajax 调用

检查此线程的以下答案以制作简单的表单制作 json 帖子

有没有办法用 simple_form 为 Rails 提交 ajax/json 请求

于 2013-08-04T05:25:04.230 回答