在我的ruby模型中,我与模型“搜索”有一个has_and_belongs_to_many关系:
has_and_belongs_to_many :searches
我想添加一个新的搜索对象,只有它尚不存在,所以我写道:
def append_unless_already_there search
unless searches.exists?(search)
searches << search
end
但是,添加2次新对象会通过该条件,并导致sql异常。尝试用search.id替换搜索,但不会改变任何东西。 我在代码中添加了一些日志记录:
def append_unless_already_there search
puts ""
puts searches.exists?(search)
unless searches.exists?(search)
puts "["
searches.each do |s|
puts s.id
end
puts "]"
puts search.id
searches << search
end
end
添加5个搜索对象,其中最后2个相等,在添加最后一个对象时会导致以下日志记录:
false
[
12
5
8
1
]
1
当我阅读给出的文档和示例时,这最后是否存在?检查应该返回true。我无法弄清楚我在这里缺少什么。提前谢谢。
答案 0 :(得分:2)
exists?
不会占用ActiveRecord::Base
个对象,它需要一个ID(或ID列表等,有关详细信息,请参阅API Docs。
所以要测试你想要做的存在:
searches.exists?(search.id)
而不是:
searches.exists?(search)
答案 1 :(得分:1)
尝试:
(searches << search) unless searches.include?(search)
OR
(searches << search) if !searches.include?(search)
<强> EDITED 强>
我不确定100%但是 如果存在,则需要id或某些值:
exists?(id = false)
但是在包含的情况下,它也需要密钥或对象:
include?(key)
有关详细信息,请查看http://api.rubyonrails.org/