Rails:如何让Jquery在单击后更新数据库列

首先,我知道我想要做的事情对于Rails来说并不典型。 我愿意接受更好的替代方案。 我是rails的新手,欢迎提出建议:)

基本上,我有一个通知栏,有5个通知。 用户单击并看到通知后,我想将数据库中的一个列设置为true。

这是我的Jquery函数:

 $(document).ready(function(){ $("button").click(function(){ $("div#count").html(""); }); });  

这里是我试图仅在点击后执行的代码(位于_notification_count.html.erb中)

    

但是,似乎此代码在页面加载时自动执行,而不是在单击后执行。 我的问题是什么?

首先,您不能简单地将render附加到按钮以对数据库进行更改(无论是读取还是写入)。 您必须使用类似的东西向控制器发出AJAX回调

 $.ajax({ url: "/path/to/your/method", type: "GET", dataType: "script" }); 

在您的控制器中,您将处理您需要执行的操作,然后使用a渲染您的js文件

 respond_to do |format| format.js {render 'shared/notification_count'} end 

这是因为当用户单击您的按钮时,代码将在客户端执行,但如果您从未向服务器发回请求,那么您将无法看到数据库的更新版本。 我建议你阅读更多内容,这对我帮助很大。

.erb文件的内容只是模板:在加载时评估。 如果您希望用户交互触发某些行为,则必须在javascript中完全执行此操作。 因此,发生数据库交互的方式就在这个链中:

  1. 用户做某事
  2. javascript与控制器对话(通过ajax或提交表单)
  3. 控制器获取有问题的模型并要求它执行某些操作
  4. 模型与数据库交互。

因此,基本上在您的模型中,您需要使用代码来触发这些通知。 只有在收到来自用户/视图的请求时,控制器才会要求模型执行此操作。