我试图找到一个解决方案,但没有问题看起来像我的。
我有一个嵌套资源“学生”:
Client
新增:控制器代码
students_controller.rb
resources :grades do
resources :students
end
我正在为使用Handsontable的学生创建大量的输入。我的问题是我不知道如何在咖啡代码中传递成绩id(或者如果我需要传递它)。
我尝试了这条新路线(如果我不创建GET路线引发错误,甚至在ajax部分选择POST。
before_action :set_grade
def set_grade
@grade = Grade.find(params[:grade_id])
end
def mass_input
#use this to create the inserts (to_do)
datos = JSON.parse(params[:form_data])
end
咖啡按钮代码
get 'students/mass_input', to: 'students#mass_input'
post 'students/mass_input', to: 'students#mass_input', as: 'mass_input'
我收到错误无法找到带有'id'= 的成绩(可以预见,我没有在网址中提供成绩ID)
我尝试了几种嵌套此mass_input路线的方法,但我收到错误“没有学生'id = mass_input'”
谢谢你们
编辑:按钮是INSIDE一个成绩,所以我必须传递当前网址成绩ID才能获得此群众学生的输入
答案 0 :(得分:0)
您的代码失败了,因为您之前的过滤器set_grade
期望参数为grade_id。您可以将此作为查询参数传递给您发送ajax请求的URL。
或者,如果您的批量创建实际上不需要成绩,则可以跳过此操作的前置过滤器:
before_action :set_grade, except: [:mass_input]
假设您在父页面中有grade_id,您可以使用生成的脚本标记将其传递给javascript:
行动中:
@grade_id = params[:id]
在你的erb模板中:
<script>
REGISTRY = { grade_id: "<%= @grade_id %>" }
</script>
在咖啡中,应该包含在上面的脚本标记之后:
$('#stu_mass_input').on 'click', (e) ->
form_data = {
mass_students: mass_students.getData(),
}
$.ajax
method: 'POST',
data: { form_data: JSON.stringify(form_data)},
url: "/students/mass_input?grade_id=#{REGISTRY.grade_id}"