Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/76.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Rails:如何让Jquery在单击后更新数据库列_Jquery_Sql_Ruby On Rails_Ruby_Postgresql - Fatal编程技术网

Rails:如何让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

首先,我知道我所尝试的并不是Rails的典型做法。我愿意接受更好的替代方案的建议。我是rails的新手,欢迎您提出建议:)

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

以下是我的Jquery函数:

<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。因此,发生数据库交互的方式如下:

  • 用户做了什么
  • javascript与控制器对话(通过ajax或提交表单)
  • 控制器得到有问题的模型并要求它做一些事情
  • 模型与数据库交互

  • 因此,基本上在您的模型中,您需要有代码来触发这些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