什么是删除多对多连接的正确方法?
问题描述:
我有Addresses
,Lists
和AddressListMemberships
。什么是删除多对多连接的正确方法?
在这个特定的应用程序中有超过一千个List
s和成千上万的Addresse
s。
我已经实现了一个UI页面,让用户控制List
的Address
es。我已经添加了这些动作...
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
一切都很好用。
但是,这些操作看起来像是代码太多。我猜测有一个更简洁,Railsish的方式来实现它们,特别是这件事...
@list.addresses << address unless @list.addresses.include? address
答
不,它不是。您的地址列表成员关联的对象上有一个可以使用的方法。因此,在您的Address模式中,您可以访问:
@address.list_ids
这是用于连接的ids数组。所以如果你有:
@address.list_ids = [1,2,3]
会有三个连接的记录。如果你想摆脱ID为2列表,你会让它
@address.list_ids = [1,3]
复选框是一个伟大的界面,这一点,你应该看看这个railscast,在HMT关系HABTM关系提供_ids阵列方法出来的ActiveRecord中的框。
这是最好的办法。
你正在构想与我正在处理的不同情况。是的,在许多情况下,复选框是一个很好的解决方案。我会尽量让我的问题更清楚。 – Ethan 2009-08-21 22:51:17