我正在尝试创建一个页面/视图应用程序。我有一个我提交的表单,它创建了一个简单的推文对象:
_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 %>
在过去的几个小时里,我一直在绞尽脑汁,没有其他任何我尝试过的各种其他堆栈溢出问题都有效。我很感激帮助。
答案 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