【问题标题】:Whats the cleanest way to handle many-to-many relationships in ruby on rails?在 ruby​​ on rails 中处理多对多关系的最干净的方法是什么?
【发布时间】:2011-03-20 01:10:03
【问题描述】:

我有一个模型说用户,它可以住在多个城镇(表示为另一个模型)。如果我创建一个新用户,我必须选择(并编辑)他们居住的不同城镇。由于时间限制,我经常会得到一个“比我想要的更骇人听闻”的解决方案,包括:http://blog.hasmanythrough.com/2006/4/20/many-to-many-dance-off.

SO 流行的任何不错的解决方案?

干杯...

懒惰型

【问题讨论】:

    标签: ruby-on-rails database data-modeling


    【解决方案1】:

    has_and_belongs_to_many 关联就是针对这种情况而建立的。这是关于它的文档:http://apidock.com/rails/ActiveRecord/Associations/ClassMethods/has_and_belongs_to_many

    否则,如果您需要存储关联本身的信息(城市表或用户表中不存在的字段,但介于两者之间),您可能只想设置两个并行的“has_many_through”关联,并设置一个单独的“user_city”表。所以它会在用户表中

    has_many :user_cities
    has_many :cities, :through => :user_cities
    

    在城市表中

    has_many :user_cities
    has_many :users, :through => :user_cities
    

    然后,您可以调用:user.cities,并获取用户居住的城市列表。

    【讨论】:

    • 我使用了很多,但在创建关系时最终会出现一些混乱的代码。例如,我有与 siteperiod 关联的站点和时间段。在我的控制器“创建操作”中,我实现了类似:#Add the period if(params[:periods]) #Delete Current Periods for siteperiod in @site.siteperiods siteperiod.destroy end for period_id in params[:periods] siteperiod = Siteperiod .new siteperiod.period_id = period_id siteperiod.site_id = @site.id siteperiod.save end end 这给我留下了一个丑陋的控制器;都非常不像轨道。干杯... Slothistype
    • 等等,我想我不明白 - 如果在这个示例中,站点通过 site_period 具有并且属于多个时期,那么如果它没有关联到,你为什么要自动删除一个站点期间了?如果你 DID ,你可以让它依赖,它会自己删除,我想,但我想我一定错过了什么?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多