【问题标题】:Want to make a button that clears a form after saving the data in a form as an object想要在将表单中的数据保存为对象后制作一个清除表单的按钮
【发布时间】:2017-10-22 05:19:01
【问题描述】:

所以我正在用 Ruby 做一个项目,我想让人们填写一个表格,这将是一个问题的答案,并且能够对同一个问题做出另一个答案。为此,我想使用表单中的数据将答案对象保存到我的数据库中,然后清除表单。我还没有弄清楚如何使用 link_to 标签来做到这一点。

这里是对象控制器:

class AnswersController < ApplicationController
  def index
    @answers = Answer.all
  end
  
  def new
    @answer = Answer.new
  end
  
  def show
    @answer = Answer.find(params[:id])
  end
  
  def create
    Question.order (:created_at)
    @question = Question.last
    @answer = @question.answers.build(answer_params)
    #if @answer.save
    #  redirect_to root_url
    #else
    #  render static_pages/home
    #end
    redirect_to root_url
  end  
  
  private
    # Never trust parameters from the scary internet, only allow the white list through.
    def answer_params
      params.require(:answer).permit(:content, :correct)
    end
end

这是新的.html.erb:

<% provide(:title, 'New Answers') %>
<h1>New Answers</h1>

<div class="row">
  <div class="col-md-6 col-md-offset-3">
    <%= form_for(@answer) do |f| %>
      <%= render 'shared/error_messages', object: f.object %>
      <%= f.label @content%>
      <%= f.text_field @content, class: 'form-control' %>
      
      <%= f.label @correct%>
      <input type="checkbox" name="Correct?" value="Correct?" checked> This answer is correct<br>    
      <%= f.submit "Finish creating Quiz", class: "btn btn-primary" %>
      <%= link_to "Create more Questions", createQuestion_path, class: "btn btn-primary" %>
      <%= link_to "Create more Answers", createAnswer_path, class: "btn btn-primary" %>
    <% end %>
  </div>
</div>

任何帮助将不胜感激。如果您需要其他任何内容以进一步了解问题,请告诉我

谢谢!

【问题讨论】:

  • 这个问题我不清楚。如果你什么用户在成功创建记录后看到一个空白表单,你为什么不在if @answer.save 分支中直接redirect_to :new 呢?

标签: ruby-on-rails ruby database


【解决方案1】:

最简单的方法是在表单提交后重定向回来。但是如果你想动态地这样做,你必须在上面添加一些 JavaScript。

因此,例如,您可以在提交时发出 AJAX POST 请求,也许添加一些该操作发生的指示,然后使用 Jquery 或纯 JavaScript 清除字段。

有很多方法可以做到这一点,您可以在here 上阅读更多信息。它可能看起来像这样:

控制器

def create
  respond_to do |format|
    @question = Question.last
    @answer = @question.answers.build(answer_params)

    if @answer.save
      format.json { head :no_content }
    else
      format.json do
        render json: {
          errors: @answer.errors.full_messages
        }, status: :unprocessable_entity
    end
  end
end

查看

<% provide(:title, 'New Answers') %>
<h1>New Answers</h1>

<div class="row">
  <div class="col-md-6 col-md-offset-3">
    <%= form_with(@answer) do |f| %>
      <%= render 'shared/error_messages', object: f.object %>
      <%= f.label @content%>
      <%= f.text_field @content, class: 'form-control' %>

      <%= f.label @correct%>
      <input type="checkbox" name="Correct?" value="Correct?" checked> This answer is correct<br>    
      <%= f.submit "Finish creating Quiz", class: "btn btn-primary" %>
      <%= link_to "Create more Questions", createQuestion_path, class: "btn btn-primary" %>
      <%= link_to "Create more Answers", createAnswer_path, class: "btn btn-primary" %>
    <% end %>
  </div>
</div>

JavaScript

$(document).ready(function() {
  $("#new_answer").on("ajax:success", function(e, data, status, xhr) {
    $('#yourForm').trigger("reset");
  }).on("ajax:error", function(e, xhr, status, error) {
    $("#new_answer").append("<p>ERROR</p>");
  });
});

【讨论】:

    猜你喜欢
    • 2018-09-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-12
    • 2013-01-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多