【发布时间】:2014-12-29 12:27:02
【问题描述】:
我的 Rails (4) 应用程序中有以下枚举模型:
class Dual < ActiveRecord::Base
enum dual: [:dual, :not_dual]
validates :dual, uniqueness: true
validates :dual, presence: true
end
我还有另一个模型,它有很多 Duals:
class SillColour < ActiveRecord::Base
has_many :sill_colour_duals, dependent: :destroy
has_many :duals, through: :sill_colour_duals
end
我希望能够测试SillColour 的实例是否具有Dual 枚举。这就是我可以开始工作的全部:
dual = Dual.find(1)
not_dual = Dual.find(2)
sill_colour.duals.include?(dual)
sill_colour.duals.include?(not_dual)
显然这是非常不可靠的,因为 Duals 的 ID 可能是生产中的任何东西(因为测试 ID 是固定的)。我试过这个:
dual = Dual.where(dual: 0)
not_dual = Dual.where(dual: 1)
甚至给定数据库对偶表如下所示:
id | dual
----+------
1 | 0
2 | 1
我的测试失败了,这似乎是因为 dual 和 non_dual 不再正确比较。我用 pry 检查了它们,它们看起来和以前一样,但显然它们不是。
肯定有更好的方法吗?我设想能够做到这一点:
sill_colour.duals.include?(Dual.dual)
sill_colour.duals.include?(Dual.not_dual)
但这也不起作用。
有什么建议吗?
【问题讨论】:
-
试试
sill_colour.duals.any? {|d| d.dual?}和sill_colour.duals.any? {|d| d.not_dual?} -
谢谢!这成功了!尽管 Rubocop 不喜欢它:'Pass &:dual?作为任何的论据?而不是一个块。我正在调查。
-
而不是块:
sill_colour.duals.where(dual: Dual.dual['dual']).any?返回真或假。您不是在寻找真假答案吗? -
另外,
Dual.dual['dual']看起来很讨厌。如果允许,您可能希望将双枚举更改为dual_status之类的东西。所以上面的语句将是sill_colour.duals.where(dual_status: Dual.dual_status['dual']).any?
标签: ruby-on-rails ruby enums