【问题标题】:Rails: How to get Jquery to update a database column after a clickRails:单击后如何让 Jquery 更新数据库列
【发布时间】:2011-07-10 21:05:33
【问题描述】:

首先,我知道我正在尝试做的不是 Rails 的典型操作。我愿意接受有关更好选择的建议。我是 Rails 新手,欢迎提出建议:)

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

这是我的 Jquery 函数:

<script type="text/javascript">
            $(document).ready(function(){
              $("button").click(function(){
                    $("div#count").html("<%= escape_javascript(render('shared/notification_count')) %>");
              });
            });
</script>

这是我仅在单击后才尝试执行的代码(位于 _notification_count.html.erb 中)

<% notification_ids =   current_user.notifications.map(&:id).join(', ')%>
<% sql = "UPDATE notifications SET SEEN = true where id IN(#{notification_ids})" %>
<% User.connection.select_all(sql) %>

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

【问题讨论】:

    标签: jquery sql ruby-on-rails ruby postgresql


    【解决方案1】:

    首先,您不能简单地将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
    

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

    【讨论】:

      【解决方案2】:

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

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

      所以基本上在您的模型中,您需要有代码来触发这些通知。只有在收到用户/视图的请求时,控制器才会要求模型这样做。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-02-11
        • 1970-01-01
        • 1970-01-01
        • 2014-09-26
        • 1970-01-01
        • 2014-01-17
        • 1970-01-01
        相关资源
        最近更新 更多