0

我正在将一个非常古老的遗留应用程序从 PHP 移植到 rails,并且遇到了一些我不确定如何以“正确”RoR 方式实现的功能。

基本上,我们有一个收集潜在客户的注册表单,潜在客户的属性之一是他们的居住州,例如;阿拉斯加、佛罗里达等

我们也有客户登录后端并可以检索潜在客户列表。这些客户的列表按状态过滤,他们的“允许”状态与他们的帐户相关联。

早在我来到这里之前就编写的原始 PHP 应用程序使用一种相当复杂的方法来为客户“拥有”的每个州创建一行,这意味着对于每个拥有亚利桑那州的客户,亚利桑那州都有一行。这个状态交叉引用表变得相当大,并且当 PHP 代码基于这些查找解析客户时,它创建了一些讨厌的嵌套循环。

我想过制作名为States的rails模型,让一个客户有很多州,一个州有很多潜在客户关系,但必须有更好的方法。

另一种选择是将状态列表保存为每个客户的数组,然后将该数组保存为一行中的文本,然后使用数组查询数据库,或者为每个客户记录的每个状态创建一行,并让每个状态与开启或关闭状态。

我觉得我缺少 rails 的内置功能,因为这似乎是一种相当常见的关系类型。

4

1 回答 1

0

我不会为客户序列化状态列表,因为这会使 SQL 查询变得困难。您最好的选择可能是在客户和状态之间创建多对多关系(allowed_states表格将包含 acustomer_id和 a state_id)。

像这样的设置可能对您有用:

class Customer < ActiveRecord::Base
  has_many :allowed_states
  has_many :states, :through => :allowed_states
end

def State < ActiveRecord::Base
  has_many :customers, :through => :allowed_states
  has_many :leads

end

class Lead < ActiveRecord::Base
  belongs_to :state

  def self.filter_allowed_for(customer)
    where(:state_id => customer.state_ids)
  end
end

通过这种方式,您可以简单地检索特定客户的筛选线索列表。请注意,客户-状态关系state_ids在客户实例上创建了一个方法。

于 2013-05-10T19:15:29.503 回答