通过jquery .ajax函数异步保存数据
实际例子:
_form.html.erb中:
<input type="text" size="1" class="edit_position" value="<%= f.position %>" data-id='<%= f.id %>'></input>
对input接受的数据进行保存, 传data-id自定义属性的意思是保存f.id的值,以便jquery的.ajax函数的url属性时候用到
app.js中:
$(".edit_position").focus(function(){
$(this).css("background-color","#FFFFCC");
});
$(".edit_position").blur(function(){
$(this).css("background-color","#D6D6FF");
var rooms_subject_id = $(this).attr("data-id");
$.ajax({
type: 'put',
url: '/manage/rooms_subjects/'+ rooms_subject_id,
cache: false,
data:{
position: $(this).val()
},
success:function(data){
alert("修改成功!");
window.location.reload();
}
});
});
focus监听鼠标焦点input事件,blur监听鼠标input失去焦点事件,.ajax由鼠标失去焦点来触发, rooms_subject_id由attr函数取到自定义的data-id属性的值为url的:id,也就是选定的room_id, 事件类型为put, url为处理该数据库存储信息的action的url, 注意如果url为/dsfa/fdsa/:id, 则要在html中自定义属性传递:id的值进行+号拼接,data中是传递的数据position对应action中获取数据的params[:position], $(this).val()为获取class的.edit_position的input内容, success为成功后的函数进行window.locaton.reload();刷新页面
room_subjects_controller.rb中:
def update
@rooms_subject = RoomsSubject.find(params[:id])
@rooms_subject.update(position: params[:position])
render nothing: true
end
对ajax的data中传递来的数据params[:position]进行数据的持久化
render nothing: ture是返回nothing否则action执行之后必须重定向到一个页面或者展示数据有自己同名.html.erb对应的页面,ajax并没由返回页面只是保存数据所以要render nothing: true