【发布时间】:2015-03-19 15:20:12
【问题描述】:
我正在使用 RoR 3..2.11。我有 4 个类:Person、Agreement、Relationship 和 Role。我的情况如下:
这是当面的:
has_many :relationships
has_many :agreements, {
through: :relationships
}
has_many :current_agreements, {
source: :agreements,
through: :relationships,
conditions: "agreements.start_date <= NOW() AND agreements.end_date >= NOW()"
}
这是关系:
belongs_to Role
数据库中添加了一个新角色(“过去”),因此可以将实时协议分配给另一个人。所以协议上的前一个人仍然与协议有关系,但不应再出现在 current_agreements 下。所以我需要考虑relationships.role.name。像这样的:
has_many :current_agreements, {
source: :agreements,
through: :relationships,
conditions: "agreements.start_date <= NOW() AND agreements.end_date >= NOW() AND role.name != 'Past'"
}
这里的问题很明确,角色不在查询中,所以 role.name 失败。有没有办法通过关联的关系.id 加入角色表?
我曾考虑将 current_agreements 重新定义为一种方法,但项目需要它在某些地方成为关联,所以我真的宁愿重新定义关联而不是重新考虑整个事情。
【问题讨论】:
标签: sql ruby-on-rails ruby-on-rails-3.2 associations