Модель не создается AJAX - PullRequest
0 голосов
/ 28 мая 2019

Я хочу создать модель View, которая создается, когда пользователь заканчивает просмотр урока.Модель должна иметь идентификатор курса и атрибут идентификатора пользователя.Но Ajax не создает модель представления после просмотра урока:

application.js:

$('#video').onended(function() {
  $.ajax({
    url:  '/views/new'
    type: 'post'
  });
});

Контроллер представлений:

def create
  @view = current_user.views.build
  @view.lesson = Lesson.find(params[:lesson_id])
end

Просмотр миграции:

def change
  create_table :views do |t|
    t.integer :lesson_id
    t.integer :user_id

    t.timestamps
  end
end

Просмотр модели:

belongs_to :user
belongs_to :lesson

Модель пользователя:

has_many :views

Модель урока:

has_many :views

Маршруты:

post 'views/new' => 'views#create'

Lessons / show.html.erb:

<h2><%= @lesson.name %></h2>
<video id="video" controls="true" width="auto" 
height="auto">
<source src="<%= url_for(@lesson.file) %>" 
type='video/mp4'>
</video>

1 Ответ

0 голосов
/ 28 мая 2019

От вашего AJAX вы не передаете params[:lesson_id] в любом случае, поэтому в контроллере он заканчивается на Lesson.find(nil), что вызывает ActiveRecord::RecordNotFound и контроллер выдает ошибку 404 (проверьте консоль браузера для этого).

<video id="video" data-id="<%= @lesson.id %>" controls="true" width="auto" height="auto">
$('#video').onended(function() {
  var id = $(this).data('id');
  $.ajax({
    url:  '/views/new'
    type: 'post',
    data: {
      lesson_id: id
    }
  });
});

Также вы не сохраняете построенный объект, используйте create! (версия взрыва выдает ошибку, если не может сохранить):

def create
  @view = current_user.views.create!(lesson: Lesson.find(params[:lesson_id]))
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...