rails:如何通过jQuery更新has_many:through关系?

时间:2008-11-04 00:48:00

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

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

我有3个班级:联系人,公司和contact_company_joins(ccj)。 对于所有三个类,我创建了模型,控制器和视图。显然,联系人和 公司通过join-table ccj连接(使用has_many:through)。

联系人< - > contact_company_joins< - >公司

在我的联系人的“显示”视图中,我想显示一个表格,列出联系人所连接的所有公司(以及公司本身的一些其他信息,例如电话号码)。在我公司看来,我想做同样的事情,但这次是关于员工(联系人)的详细信息。 该表的每一行都有典型的“删除”链接,其功能我现在已经连接到我的一个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控制器的destroy函数。 我现在要做的是更新或重新呈现正在调用删除功能的单个站点(联系人或公司)的表,但仅限于表的一部分。我想我必须在上面的“成功”功能中实现它吗?但话说回来,即使我从ccj的控制器返回一些东西(渲染的部分?)......对于联系人和公司视图来说都是一样的,对吧? 我怎样才能确保在我的Ajax调用之后销毁ccj对象,我为我的联系人的视图(这将是一个新的公司表)获得一个新的DOM对象,但是当我从Ajax调用时获得一个新的联系人表我的公司观点?

希望这一切都有道理: - )

此致

塞巴斯蒂安

1 个答案:

答案 0 :(得分:2)

你需要的只是删除操作返回成功或失败(即使只是真或假),然后你的javascript可以处理任何一个响应。

如果失败,则返回一条消息说明,如果成功并删除了关系,则可以找到< tr>您单击的删除链接的父级并将该行淡出,最终将其从页面中删除。例如(如果删除成功则控制器返回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;   
  });