1

次のコードのようなものがあります。 (モデル名は何が起こっているかに重要ではないので変更されました)ActiveRecord :: RecordNotUniqueを取得しましたが、既存のレコードを見つけることができません

#find_or_create_bar_for_blah_idはほとんどの場合、うまく動作します。時にはそれはゼロを返すでしょう、なぜ私は確信していません。

Googleのアプリの一部として実行されるresqueジョブで問題が発生するため、これは何らかの競合状態です。

#find_or_create_bar_for_blah_idがnilを返す方法に関する手がかりはありますか?

class Foo < ActiveRecord::Base 
    has_many :bars, :dependent => :destroy 

    def find_or_create_bar_for_blah_id(locale_id) 
    begin 
     bars.where(:blah_id => blah_id).first || bars.create!(:blah_id => blah_id) 
    rescue ActiveRecord::RecordNotUnique 
     bars.where(:blah_id => blah_id).first 
    end 
    end 
end 

class Bar < ActiveRecord::Base 
    belongs_to :foo 
    validates_uniqueness_of :blah_id, :scope => :foo_id 
end 


# db/schema.rb 

create_table "bars", :force => true do |t| 
    t.integer "foo_id" 
    t.integer "blah_id" 
    t.datetime "created_at" 
    t.datetime "updated_at" 
end 

add_index "bars", ["foo_id", "blah_id"], :name => "index_bars_on_foo_id_and_blah_id", :unique => true 
add_index "bars", ["foo_id"], :name => "index_bars_on_foo_id" 

create_table "foos", :force => true do |t| 
    t.string "name" 
    t.datetime "created_at" 
    t.datetime "updated_at" 
end 

add_index "foos", ["name"], :name => "index_foos_on_name" 

答えて

1

Doh!これは、AR検証を実行しないコードの一部でupdate_attributeを使用していたためです。 恥ずかしい顔

関連する問題