删除多对多连接的正确方法是什么?

时间:2009-08-21 03:06:07

标签: ruby-on-rails activerecord

我有AddressesListsAddressListMemberships

在这个特定的应用程序中,有超过一千List秒和数千Addresse s。

我已经实现了一个UI页面,让用户可以控制List的{​​{1}}个。我添加了这些动作......

Address

一切都很美妙。

但是,这些操作看起来似乎有太多代码。我猜测有一种更简洁,Railsish的方式来实现它们,尤其是这个......

class ListsController < ApplicationController

  # ...

  def add_address
    @list = List.find(params[:id])
    address = Address.find(params[:address_id])
    @list.addresses << address unless @list.addresses.include? address
    redirect_to(manage_list_addresses_path(@list))
  end

  def remove_address
    @list = List.find(params[:id])
    address = Address.find(params[:address_id])
    @list.addresses.delete address
    redirect_to(manage_list_addresses_path(@list))
  end

end

1 个答案:

答案 0 :(得分:2)

不,不是。附加地址列表成员资格的对象上有一个可以使用的方法。因此,在您的地址模型上,您可以访问:

@address.list_ids

这是连接的一组id。所以如果你有:

@address.list_ids = [1,2,3]

将有三个已加入的记录。如果你想摆脱ID为2的List,你就可以了。

@address.list_ids = [1,3]

复选框是一个很好的接口,您应该看看这个railscast,HMT关系和HABTM关系提供ActiveRecord中开箱即用的_ids数组方法。

这是最好的方法。