【问题标题】:Model is not being created by AJAX模型不是由 AJAX 创建的
【发布时间】:2019-05-28 14:31:47
【问题描述】:

我想创建一个View 模型,该模型是在用户完成观看课程时创建的。该模型应该有一个课程 ID 和一个用户 ID 属性。但是 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'

课程/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>

【问题讨论】:

  • 您能否也向我们展示一下您最初调试的结果?只说它不起作用并没有给我们太多的继续。
  • 您没有在 @view 对象上调用 save。您刚刚构建了一个视图并分配了一个 leeson,但您从未保存它。
  • 你也可以做类似@view = current_user.views.create(lesson_id: params[:lesson_id])的事情
  • @arieljuod 我试过了。视图模型仍未创建

标签: javascript ruby-on-rails ruby ajax


【解决方案1】:

从您的 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!(如果无法保存,bang 版本会引发错误):

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-03-10
    • 1970-01-01
    • 1970-01-01
    • 2011-04-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多