Rails:如何让Jquery在单击后更新数据库列
首先,我知道我所尝试的并不是Rails的典型做法。我愿意接受更好的替代方案的建议。我是rails的新手,欢迎您提出建议:) 基本上,我有一个通知栏,有5个通知。在用户单击并看到通知后,我希望将数据库中名为seen的a列设置为true 以下是我的Jquery函数:Rails:如何让Jquery在单击后更新数据库列,jquery,sql,ruby-on-rails,ruby,postgresql,Jquery,Sql,Ruby On Rails,Ruby,Postgresql,首先,我知道我所尝试的并不是Rails的典型做法。我愿意接受更好的替代方案的建议。我是rails的新手,欢迎您提出建议:) 基本上,我有一个通知栏,有5个通知。在用户单击并看到通知后,我希望将数据库中名为seen的a列设置为true 以下是我的Jquery函数: <script type="text/javascript"> $(document).ready(function(){ $("button").click(functi
<script type="text/javascript">
$(document).ready(function(){
$("button").click(function(){
$("div#count").html("<%= escape_javascript(render('shared/notification_count')) %>");
});
});
</script>
$(文档).ready(函数(){
$(“按钮”)。单击(函数(){
$(“div#count”).html(“”);
});
});
下面是我仅在单击之后才尝试执行的代码(位于_notification_count.html.erb中)
但是,这段代码似乎是在页面加载时自动执行的,而不是在单击之后。我的问题是什么?您的.erb文件的内容只是模板:在加载时对模板进行评估。如果您想让用户交互触发某些行为,就必须完全使用javascript。因此,发生数据库交互的方式如下:
因此,基本上在您的模型中,您需要有代码来触发这些NotifAction。控制器仅在收到用户/视图的请求时才会请求模型执行此操作。首先,您不能简单地将
渲染
附加到按钮以更改数据库(无论是读还是写)。您必须使用以下命令对控制器进行AJAX回调
$.ajax({
url: "/path/to/your/method",
type: "GET",
dataType: "script"
});
在控制器中,您将处理需要执行的操作,然后使用
respond_to do |format|
format.js {render 'shared/notification_count'}
end
这是因为当用户单击您的按钮时,代码将在客户端执行,但如果您从未向服务器发出请求,则您将无法看到数据库的更新版本。我建议你多读一些,这对我很有帮助
respond_to do |format|
format.js {render 'shared/notification_count'}
end