ReferenceError: Невозможно найти переменную: Rails - PullRequest
0 голосов
/ 23 декабря 2018

Я начинающий программист, пробующий Ruby on Rails.

Я добавил сортируемый пользовательский интерфейс в свое приложение со списком дел.Я могу перетащить элементы списка, но мне не удалось сохранить новые позиции в базе данных.

Отладчик в моем браузере Safari показал ошибку при перетаскивании элементов списка:

ReferenceError: Не могу найти переменную: Rails

Я изучал этот урок: https://www.youtube.com/watch?v=Aru-XvzzGjU

Я думаю, это задача .js файл, переменная которого Ruby on Rails не найдена.Ошибка исчезает, когда я перемещаю сценарий jQuery ниже сценария пользовательского интерфейса jQuery, но появляется другая ошибка

uncaught typeerror: $ (...). Sortable не является функцией

tasks.js:

document.addEventListener("turbolinks:load", function () {

  $("#tasks").sortable(
    {
      update: function(e, ui) {
        //console.log($(this).sortable('serialize'));
        Rails.ajax({
          url: $(this).data("url"),
          type: "PATCH",
          data: $(this).sortable('serialize'),
        });
      }
    }
  );
});

application.css:

//= require activestorage
//= require turbolinks
//= require_tree .
//= require jquery
//= require jquery_ujs
//= require jquery-ui/widget
//= require jquery-ui/widgets/sortable
//= require rails_sortable

index.html :

<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jqueryui/1.12.0/jquery-ui.min.js"></script>
<%= stylesheet_link_tag "application" %>

    <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/css/bootstrap.min.css"
    integrity="sha384-MCw98/SFnGE8fJT3GXwEOngsV7Zt27NXFoaoApmYm81iuXoPkFOJwJ8ERdknLPMO"
    crossorigin="anonymous">

task.rb:

class Task < ApplicationRecord
  validates :title, :description, presence:true
  acts_as_list scope: [:title, :description]
end

контроллер задач:

class TasksController < ApplicationController
  # create new instance of the task
  def index
    @task = Task.order(:position)
  end

  def new
    @task = Task.new
  end

  def create
    #create a new instance
    @task = Task.new(task_params)
    @task.save

    #redirect to url
    redirect_to @task
  end

  def show
    find_task
  end

  def edit
    find_task
  end

  def update
    find_task
    @task.update(task_params)

    redirect_to @task
  end

  def destroy
    find_task.destroy

    redirect_to tasks_path
  end

  def sort

    params[:task].each_with_index do |id, index|
      Task.where(id: id).update_all({position:index + 1})
    end

    head :ok

  end

end

private
  def task_params
    params.require(:task).permit(:title, :description)
  end

  def find_task
    @task  = Task.find(params[:id])
    return @task
  end

1 Ответ

0 голосов
/ 23 декабря 2018

Я понял, что мне просто нужно добавить это в файл application.js :

// = require rails-ujs

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...