रेल में एक काउंटर के साथ एक मॉडल के लिए एक परमाणु सम्मिलित/अपडेट लागू करने के लिए सबसे अच्छा तरीका क्या है? ,परमाणु डालने या वेतन वृद्धि
url : string
count : integer
डालने पर अगर वहाँ वर्तमान में एक मिलान यूआरएल के साथ एक रिकॉर्ड नहीं है, एक नया रिकार्ड बनाया जाना चाहिए: समस्या मैं हल करने के लिए कोशिश कर रहा हूँ के लिए एक अच्छा सादृश्य एक "की तरह" दो क्षेत्रों के साथ काउंटर है गिनती 1 के साथ; अन्यथा मौजूदा रिकॉर्ड का count
फ़ील्ड बढ़ाया जाना चाहिए।
शुरू में मैं की तरह कोड की कोशिश की है:
Like.find_or_create_by_url("http://example.com").increment!(:count)
लेकिन आश्चर्य है, जिसके परिणामस्वरूप एसक्यूएल पता चलता है कि SELECT
UPDATE
लेन-देन के बाहर होता है:
Like Load (0.4ms) SELECT `likes`.* FROM `likes` WHERE `likes`.`url` = 'http://example.com' LIMIT 1
(0.1ms) BEGIN
(0.2ms) UPDATE `likes` SET `count` = 4, `updated_at` = '2013-01-17 19:41:22' WHERE `likes`.`id` = 2
(1.6ms) COMMIT
वहाँ से निपटने के लिए एक रेल मुहावरा है यह, या मुझे एसक्यूएल स्तर पर इसे लागू करने की आवश्यकता है (और इस प्रकार कुछ पोर्टेबिलिटी खोना)?
4 साल बाद भी, एक स्थिर/सामुदायिक-समर्थित उत्तर की तलाश में है। –