【问题标题】:has_and_belongs_to_many relationship not associating both wayshas_and_belongs_to_many 关系没有关联两种方式
【发布时间】:2011-06-01 19:15:17
【问题描述】:

我使用 has_and_belongs_to_many 建立关系来关联用户和事件。然后我试试这个:

user = User.find(1)
event = Event.find(1

)

这两个目前都没有关联...然后我尝试通过这样做来关联它们:

user.events << event

此操作有效...但是,它们不能正确关联:

user.events 正确列出了该用户的事件...但 event.users 没有该用户与之关联。

我该如何做到这一点,以便当我将一个与另一个关联时(事件与用户或用户与事件)......它会自动以另一种方式关联?

【问题讨论】:

    标签: ruby-on-rails activerecord


    【解决方案1】:

    has_and_belongs_to_many 是否存在于两个模型中?听起来不是,而should be:

    # models/user.rb
    class User < ActiveRecord::Base
      has_and_belongs_to_many :events
    end
    
    # models/event.rb
    class Event < ActiveRecord::Base
      has_and_belongs_to_many :users
    end
    

    【讨论】:

    • 是的,他们都在场。我检查了数据库,它似乎正在工作......而且,当我做 event.users.all 而不是 event.users 时,我让它工作了......有什么理由只能这样工作吗?
    • 我的猜测是由于缓存,但我需要在做出任何陈述之前查看代码。已解决模型清除缓存问题in this question
    【解决方案2】:

    假设您的链接设置正确,您可以对此进行测试:

    user.events << event
    event.reload.users
    

    这将显式地重新加载数据库中的数据,而不是使用本地缓存的版本。如果您曾经访问过该关联,它将不再在数据库中查找它,除非您明确要求它。

    这有帮助吗?

    【讨论】:

      猜你喜欢
      • 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
      相关资源
      最近更新 更多