我有以下模型/关联设置:
class Contact < ActiveRecord::Base
has_and_belongs_to_many :assigned_users, class_name: 'User'
def auto_assign_team_member(project)
team = project.teams(true).order('last_assigned_contact_at ASC').first
if team && (user = team.user)
self.assigned_users << user
team.update_attribute(:last_assigned_contact_at, Time.now)
end
end
end
class Team < ActiveRecord::Base
belongs_to :user
belongs_to :project
end
class User < ActiveRecord::Base
has_many :teams
has_many :projects, through: :teams
has_and_belongs_to_many :assigned_contacts, class_name: 'Contact'
end
class Project < ActiveRecord::Base
has_many :teams
has_many :users, through: :teams
end
我还有一组Contact
实例,我遍历并执行该auto_assign_team_member
方法。我的问题是lvar几乎每次执行都会team
返回同一个团队。我在表中有两条记录,我的目的是将团队成员平均分配到关联中。teams
Contact#assigned_users
在控制台中,它可以工作:
project.teams(true).order('last_assigned_contact_at ASC').first #=> Team(user_id: 1)
project.teams(true).order('last_assigned_contact_at ASC').first.update_attribute(:last_assigned_contact_at, Time.now)
project.teams(true).order('last_assigned_contact_at ASC').first #=> Team(user_id: 2)
知道我在哪里出错了吗?
编辑如果有人感兴趣,我已经创建了一个小应用程序来重现这个https://github.com/injekt/teamr
您可以简单rake db:seed
地运行运行测试数据,输出应该均匀分布在每个用户上,而不是每次都显示同一个用户。
编辑事实证明,这样做update_attribute(:last_assigned_contact_at, 'now()')
效果很好。所以也许 Rails 正在做一些时髦的事情?我意识到这需要高精度,但我认为 Rails 可以处理