0

私のルビーモデルには、モデル「検索」との 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 を 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

最後の 2 つが等しい 5 つの検索オブジェクトを追加すると、最後のオブジェクトを追加すると、次のログが記録されます。

false
[
12
5
8
1
]
1

与えられたドキュメントと例を読むと、これは最後に存在しますか? チェックは true を返す必要があります。ここで何が欠けているのかわかりません。前もって感謝します。

4

2 に答える 2

2

exists?ActiveRecord::BaseID (または ID のリストなど) を取ります。詳細については、API ドキュメントを参照してください

したがって、存在をテストするには、次のことを行います。

searches.exists?(search.id)

それよりも:

searches.exists?(search)
于 2012-04-05T09:46:59.833 に答える
1

試す:

(searches << search) unless searches.include?(search)

また

(searches << search) if !searches.include?(search)

編集済み

私は100%確信が持てませんが、存在する場合はidまたは何らかの値を取ります:

exists?(id = false) 

ただし、 include の場合は、キーまたはオブジェクトも受け取ります。

include?(key) 

詳細については、http://api.rubyonrails.org/ を確認してください。

于 2012-04-05T10:42:50.627 に答える