From 32ea7c6c01710e5a0fd7bd72af9aad73efc76a70 Mon Sep 17 00:00:00 2001 From: Martin Edenhofer Date: Fri, 4 Jan 2013 09:00:16 +0100 Subject: [PATCH] Improved lookup(), create_if_not_exists() and create_or_update() with name lookup. --- app/models/application_model.rb | 39 +++++++++++++++++++++------------ 1 file changed, 25 insertions(+), 14 deletions(-) diff --git a/app/models/application_model.rb b/app/models/application_model.rb index c3e499b6e..04134437c 100644 --- a/app/models/application_model.rb +++ b/app/models/application_model.rb @@ -58,9 +58,14 @@ class ApplicationModel < ActiveRecord::Base cache = self.cache_get( data[:name] ) return cache if cache - record = self.where( :name => data[:name] ).first - self.cache_set( data[:name], record ) - return record + records = self.where( :name => data[:name] ) + records.each {|record| + if record.name == data[:name] + self.cache_set( data[:name], record ) + return record + end + } + return else raise "Need name or id for lookup()" end @@ -68,24 +73,30 @@ class ApplicationModel < ActiveRecord::Base def self.create_if_not_exists(data) if data[:name] - record = self.where( :name => data[:name] ).first - return record if record + records = self.where( :name => data[:name] ) + records.each {|record| + return record if record.name == data[:name] + } elsif data[:locale] && data[:source] - record = self.where( :locale => data[:locale], :source => data[:source] ).first - return record if record + records = self.where( :locale => data[:locale], :source => data[:source] ) + records.each {|record| + return record if record.source == data[:source] + } end self.create(data) end def self.create_or_update(data) if data[:name] - record = self.where( :name => data[:name] ).first - if record - record.update_attributes( :data => data[:data] ) - else - record = self.new( data ) - record.save - end + records = self.where( :name => data[:name] ) + records.each {|record| + if record.name == data[:name] + record.update_attributes( :data => data[:data] ) + return record + end + } + record = self.new( data ) + record.save return record else raise "Need name for create_or_update()"