【问题标题】:rails: how to update a has_many :through relation via jQuery?rails: 如何通过 jQuery 更新 has_many :through 关系?
【发布时间】:2010-09-20 14:27:15
【问题描述】:

对不起,如果这是一个愚蠢的问题,但我刚刚开始使用 Rails 和 jQuery。我有以下情况:

我有 3 个课程:contactscompaniescontact_company_joins (ccj)。 对于我创建的所有三个类modelscontrollerviews。显然,联系人和 公司通过连接表 ccj 连接(使用 has_many :through)。

contacts <-> contact_company_joins <-> companies

在我的联系人的“显示”视图中,我想显示一个表格,其中列出了联系人所连接的所有公司(以及公司本身的一些附加信息,例如电话号码)。在我的公司看来,我也想做同样的事情,但这次是员工(联系人)的详细信息。 表格的每一行最后都有一个典型的“删除”链接,我现在已经将它的函数连接到我的一个 jQuery 函数:

$('.edit_contact_join_delete').livequery('click', function() {
    var $deleteButton = $(this);
    var answer = confirm("Sure?");
    var dataloc = "&_method=delete";
    if (answer) {
     $.ajax({
          type : "POST",
          url  : this.href,
          data : dataloc,
          success: function(result) {
          }
        });
    }
    return false;
  });

在两个视图(联系人和公司)中,删除操作将我带到 ccj 控制器的销毁功能。 我现在要做的是更新或重新呈现调用删除函数的单个站点(联系人或公司)的表,但只更新表的一部分。我想我必须在上面的“成功”功能中实现它?但是话又说回来,即使我从 ccj 的控制器返回一些东西(呈现的部分?)......对于联系人和公司视图来说,这将是相同的,对吧? 我如何确保在我的 Ajax 调用销毁 ccj 对象后,我为我的联系人视图获得一个新的 DOM 对象(这将是一个新的公司表),但在我执行 Ajax 调用时也获得一个新的联系人表我的公司观点?

希望这一切都有意义:-)

问候,

塞巴斯蒂安

【问题讨论】:

    标签: jquery ruby-on-rails ajax has-many renderpartial


    【解决方案1】:

    您所需要的只是删除操作返回成功或失败(即使只是 true 或 false 也可以),然后您的 javascript 可以处理任一响应。

    如果失败则返回一条消息,如果成功并且关系被删除,您可以找到您单击的删除链接的

    父级并淡出该行,最终将其从页面中删除。例如(假设您的控制器在删除成功时返回 true,否则返回 false):
    $('.edit_contact_join_delete').livequery('click', function() {
        var $deleteButton = $(this);
        var answer = confirm("Sure?");
        var dataloc = "&_method=delete";
        if (answer) {
         $.ajax({
              type : "POST",
              url  : this.href,
              data : dataloc,
              success: function(result) {
                if (result) {
                  // handle successful delete
                  $deleteButton.parent('tr').fadeOut().remove()
                } else {
                  // handle failed delete
                  alert('Delete failed');
                }
              } 
            });
        }
        return false;   
      });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-04-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-21
      相关资源
      最近更新 更多