我想创建一个View
模型,该模型在用户结束观看课程后创建。该模型应具有课程ID和用户ID属性。但是在观看了一个课程之后,Ajax不会创建视图模型:
application.js:
$('#video').onended(function() {
$.ajax({
url: '/views/new'
type: 'post'
});
});
Views Controller:
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>
答案 0 :(得分:0)
在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