我是Rails的新手,并且正在尝试使用AJAX更新或发布到我的数据库。我在开发日志中看到以下代码查询数据库,但数据不作为参数传递给控制器操作,并且数据库没有更新,尽管我能够访问{{1} },"是"和"成功"通过jQuery提醒下面。
flascard_id
user_flashcards.js.coffee
("div.user_flashcards_form").click ->
slide_number = $('.flexslider').data('flexslider').currentSlide + 1
flashcard_id = $("img:eq("+slide_number+")").data("flashcard-id")
alert(flashcard_id)
if !@checked
alert("yes")
$.ajax({
url: "/user_flashcards/" + flashcard_id + "/mark",
type: "POST",
data: { marked: @checked },
success: (data) ->
alert ("success")
return false
error:(data) ->
return false
})
else
alert("no")
return
user_flashcards_controller.rb
答案 0 :(得分:0)
我将@checked改为 $('input#mark.flashcard_mark_checkbox.checkbox')。是(:选中)和 代码正在运行。
问题在于您依靠checkbox
输入将数据传递给控制器
-
Checkboxes don't have a value if they are unchecked (at least to JQuery's Serialize method):
因此,您可能会期望查询字符串如:
'checkbox1=true&checkbox2=false'
你真正得到的是:
'checkbox1='
我想象的是,如果未选中该复选框,则会向控制器发送一个空白或不存在的参数。当然,这不会注册任何数据。我会这样做:
def mark
@flashcard_id = params[:id]
user_id = current_user.id
marked = params[:marked] || "0"
@user_flashcard = UserFlashcards.where(flashcard_id: @flashcard_id, user_id: user_id).first_or_create
if @user_flashcard
@user_flashcard.update(marked: marked)
end
end
这将为marked
提供默认值,应允许您将其正确保存到数据库