uncatch TypeError:ajaxForm 不是 rails 版本 5 中的函数



我正在尝试使用 ajaxForm 提交模态表单并在模态本身中显示响应。但是,我遇到未捕获的类型错误(...ajaxForm 不是一个函数。基本上我想为课程创建表单创建一个模态表单,并且必须提交,我的应用程序由 API 控制器和前端控制器组成。

    api!
  param_group :lesson
  description 'creates a lesson'
  example "
  {
    'id': 12,
    'title': 'MUDRAS',
    'active_video_id': 3,
    'description': 'Description of the lesson',
    'points': null,
    'is_public': '1',
    'videos': [
      {
        'video': {
           'id': 1,
           'video': {
              'url': '/uploads/video/video/1/250-authentication-from-scratch.mp4'
            },
           'title': null,
           'storage_type': 'Lesson',
           'storage_id': 12
        }
      },
    ]
  }"
  def create
    @lesson = Lesson.new(lesson_params)
    @lesson.creator = current_user
    if @lesson.save
      render json: {
        success: true,
        message: "Lesson created Successfully"
      }
    else
      render json: { success: false, message: "Could not Create : #{@lesson.errors.full_messages.join(', ')}" }
    end
  end
def new
    @lesson = Lesson.new
  end

上面的代码是我的 API 控制器。以下代码是我的前端控制器和课程相关表格。

def create  
    @lesson = Lesson.new(lesson_params)
    if @lesson.save
      render json: {
        success: true,
        message: "Lesson Created Successfully"
      }
    else
      render json: {
        success: false,
        message: "Lesson Creation Failed"
      }
    end
  end

我需要在课程索引页面中显示"新课程"按钮。课程/索引.html.erb

<% unless current_user.student? %>
  <div class="container-fluid">
    <div class="col-md-3 col-sm-3 text-left">
      <div id="newLesson" class="lesson-category btn-danger" lesson_url="<%= new_lesson_path %>">
        <i class="fa fa-plus"></i> ADD LESSON
      </div>
    </div>
  </div>
  <div class="hidden" id="newLessonForm">
    <% @lesson = Lesson.new ; @lesson.videos = [Video.new] %>
    <%= render "lessons/form" %>
  </div>
<% end %>
<%= render "shared/primary_modal" %>
<div class="container-fluid">
  <div class="col-md-3 col-sm-3 text-left">
    <h2 class="main-tab tab-active">LESSONS</h2>
  </div>
  <div class="col-md-9">
    <div class="col-md-12 text-right">
      <h2 class="main-tab tab-inactive"><a id="responsesLink" class="blacko" href="#"><%= "MY" if current_user.student? %> RESPONSES</a></h2>
    </div>
  </div>
  <div class="col-md-12"><hr/></div>
  <!-- Lessons of this course Go here -->
  <div class="col-md-3">
    <% @lessons.each do |lesson| %>
      <div id="lesson_<%= lesson.id %>" class="pill video-view lesson-load" data-lesson-id="<%= lesson.id %>" data-src="<%= lesson.active_video_url %>"><%= lesson.title %></div>
    <% end %>
    <!-- <div class="pill pill-inactive">Something</div> -->
  </div>
  <!-- Lesson Content goes here -->
  <div class="col-md-9">
    <div class="row">
      <div class="col-md-12"> 
        <%= render "shared/video_player" %>
      </div>
    </div>
    <div id="lessonContent">
    </div>
  </div>
</div>
<script>
  $("#newLesson").click(function(){
      var lesson_path = $(this).attr("lesson_url");
      $.get(
        lesson_path,
        function(content){
          $("#primaryModalContent").html(content);
          $("#format").val('js');
          $("#primaryModal").modal("show");
        }
      );
    });
</script>

我的课程创建表格是部分给出的。

<div class="col-md-12">
  <%= simple_form_for @lesson, html: {class: "newLessonform"} do |f| %>
    <%= f.input :title, label: "Lesson Title", required: false %>
    <%= f.input :description, required: false, as: :text %>
    <%= f.input :points, required: false, as: :integer %>
    <%= f.input :is_public, label: 'Check to Make this lesson public', as: :boolean %>
    <div class="col-md-12">
      <% unless @lesson.new_record? or @lesson.active_video_url.blank? %>
        <h4> Currently Linked Video </h4>
        <video src="<%= @lesson.active_video_url %>" style="width: 400px;"></video>
      <% end %>
      <hr/>
    </div>
    <h4>Add <%= @lesson.videos.blank? ? "a" : "another" %> Video</h4>
    <% @lesson.videos = [Video.new(title: "")] if @lesson.videos.blank? %>
    <%= f.simple_fields_for :videos do |g| %>
      <%= g.input :title, label: "Video title" %>
      <%= g.input :video, as: :file, lebel: "Select Video" %>
    <% end %>
    <center><%= f.submit class: "lesson-category btn-danger" %></center>
  <% end %>
</div>
<script type="text/javascript">
  $(".newLessonform").ajaxForm(function(data) {
    $("#primaryModalContent").html(data.message);
  });
</script>

在上面的脚本中,我给出了ajaxForm。下面给出了模态形式。

<div class="modal fade" id="primaryModal" role="dialog">
  <div class="modal-dialog modal-lg">
    <div class="modal-content">
      <div class="modal-header">
        <button type="button" class="close" , data-dismiss="modal">&times;</button>
        <h1 class="modal-title" id="modalTitle"></h1>
      </div>
      <div class="row modal-body" id="primaryModalContent">
      </div>
      <div class="modal-footer">
        <button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
      </div>
    </div>
  </div>
</div>

chrome 控制台中的错误是未捕获的错误:(...$.ajaxForm 不是一个函数。我被困在里面大约一个星期。谁能给我一个解决方案。

提前谢谢。

在 rails 中使用 AJAX 表单的最佳方法是使用 rails_ujs

首先,您必须告诉rails_ujs您希望在表单上执行 AJAX 操作:

 <%= simple_form_for @lesson, html: {class: "newLessonform"}, remote: true do |f| %>

然后在视图中添加一个新文件,此视图将在 AJAX 操作成功启动创建操作后呈现: views/lessons/create.js.erb
在里面你可以放js代码,这段代码将与AJAX表单在同一页面上执行。这只是一个视图,您可以使用控制器中的变量。

$("#primaryModalContent").html("<%= @message %>")

最后,您需要更新控制器以处理 AJAX 操作:

def create  
  @lesson = Lesson.new(lesson_params)
  if @lesson.save
    @success = true
    @message = "Lesson Created Successfully"
  else
    @success = false,
    @message = "Lesson Creation Failed"
  end
  respond_to do |format|
    format.js
  end
end

在这里你可以找到一些关于Rails UJS的文档:
http://guides.rubyonrails.org/working_with_javascript_in_rails.html#remote-elementshttps://blog.codeship.com/unobtrusive-javascript-via-ajax-rails/

最新更新