【问题标题】:Mongoid associations, lazy loading, and allMongoid 关联、延迟加载等
【发布时间】:2011-11-07 07:35:37
【问题描述】:

我有以下型号

班级投票 包括 Mongoid::Document 包括 Mongoid::Timestamps field :value, :type => Symbol # 可以是 :aye, :nay, :abstain, :present 属于_to:用户 属于_to :polco_group 属于_to :bill

和比尔

班比尔 has_many:投票

和一个用户

类用户 has_many:投票

我正在尝试实现以下测试

b = Bill.new @user1.vote_on(b, :aye) assert_equal :aye, b.voted_on?(@user1)

这个测试失败了,因为如果我按照这些步骤,b.votes.all 是空的,但b.votes 有我们需要的数据。但是,如果我打开 rails 控制台,我会发现 b.votes 是 [],但如果我按照这些步骤操作,b.votes.all 会完全填充。我确信这里缺少一些简单的东西。什么时候需要 b.votes [] 和 .all?

我的方法:

# 在 User.rb 中 def vote_on(账单,价值) # 测试以确保用户是组的成员 my_groups = self.joined_groups 除非 my_groups.empty? 除非 bill.voted_on?(self) my_groups.each 做 |g| 除非 Vote.create(:value => value, :user => self, :polco_group => g, :bill => bill) 提出“投票无效” 结尾 结尾 结尾 #bill.保存! 别的 引发“此用户没有加入的群组” 结尾 结尾

# 在 Bill.rb 中 def voted_on?(用户) 如果投票 = self.votes.all.select{|v| v.user == 用户} 投票.map{|v| v.value}.first 别的 零 结尾 结尾

【问题讨论】:

  • 尝试将Bill.new 替换为Bill.create,这应该可以解决您的大部分问题。如果可行,请告诉我,将尝试解释逻辑。
  • 我什至使用了 Fabrications 加载的现有账单,但我仍然遇到这个问题。

标签: ruby-on-rails mongodb associations mongoid


【解决方案1】:

我认为这是问题 #1198 的结果。设置关系后尝试重新加载对象。

https://github.com/mongoid/mongoid/issues/1198

【讨论】:

  • 不客气,伙计。并为这个错误道歉。如果您密切关注 GitHub 问题,您将收到更新通知。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-01-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-02-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多