我正在为一家药店设计一款ruby on rails应用程序,其中一项功能就是有些商店有药剂师在那里工作。此外,还有药剂师,他们可以在许多商店工作。这听起来像是HABTM的工作,对吧?好吧,作为我的新手,我手动设计了一个解决方法(因为我从来没有听说过HABTM - 我基本上自学了轨道,从来没有达到一些更高级的关系)。现在,当药剂师被保存时,药剂师控制器的创建和更新操作中有几行将他们工作的商店变成一个字符串,每个store_id用逗号分隔。然后,当显示商店时,它会执行MYSQL请求
@pharmacists = Pharmacist.find :all, :conditions => "stores REGEXP '#{@store.id}'"
将此系统移至基于轨道的HABTM系统会更有效吗?当然最终需要更少的代码,但是它值得吗?换句话说,除了更少的代码之外,我可以通过将此关联移动到rails来管理吗?
答案 0 :(得分:1)
好处是您将使用正确的工具来完成工作!使用像Rails这样的框架的全部意义在于它可以帮助您解决常见问题,而无需重新发明轮子,这就是您在这里所做的。通过使用关联,您还可以正确使用关系数据库,并可以利用外键索引等优点,这将比字符串操作更快。
您应该使用has_and_belongs_to_many
关系,除非您需要在连接模型上存储额外的属性(例如药剂师开始在商店工作的日期),在这种情况下使用has_many :through
。
使用Rails关联将为您提供Rails提供的所有方便的方法,例如:
# Find the stores the first pharmacist works at
@stores = Pharmacist.first.stores
# Find the pharmacists who work at a store
@pharmacists = Store.find_by_name('A Store').pharmacists