2009-08-21 102 views
0

我有Addresses,ListsAddressListMemberships什么是删除多对多连接的正确方法?

在这个特定的应用程序中有超过一千个List s和成千上万的Addresse s。

我已经实现了一个UI页面,让用户控制ListAddress 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 

回答

2

不,它不是。您的地址列表成员关联的对象上有一个可以使用的方法。因此,在您的Address模式中,您可以访问:

@address.list_ids 

这是用于连接的ids数组。所以如果你有:

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

会有三个连接的记录。如果你想摆脱ID为2列表,你会让它

@address.list_ids = [1,3] 

复选框是一个伟大的界面,这一点,你应该看看这个railscast,在HMT关系HABTM关系提供_ids阵列方法出来的ActiveRecord中的框。

这是最好的办法。

+0

你正在构想与我正在处理的不同情况。是的,在许多情况下,复选框是一个很好的解决方案。我会尽量让我的问题更清楚。 – Ethan 2009-08-21 22:51:17

相关问题