यदि डेटा अखंडता महत्वपूर्ण है, तो आपको विशिष्टता की गारंटी के लिए सत्यापन का उपयोग नहीं करना चाहिए। यह विफल हो सकता है। विशिष्टता की गारंटी देने का एकमात्र तरीका डेटाबेस बाधा का उपयोग करना है। ऐसा इसलिए है क्योंकि रेल validates_uniqueness
दौड़ की स्थिति हो सकती है।
अनुक्रमणिका जोड़ने के लिए एक माइग्रेशन बनाएँ, या इस परिवर्तन को दर्शाने के लिए अपने मौजूदा को बदलें:
नई तालिका के लिए:
class CreateVotes < ActiveRecord::Migration
def change
create_table :votes do |t|
t.belongs_to :voter
t.belongs_to :votefor
t.string :vote # Choose the correct column type
t.timestamps
end
add_index :votes, [:voter_id, :votefor_id, :vote], unique: true
end
end
मौजूदा तालिका के लिए:
class AddUniqueIndexToVotes < ActiveRecord::Migration
def change
add_index :votes, [voter_id, votefor_id, vote], unique: true
end
end
अब आप आगे बढ़ सकते हैं और एक सत्यापन जोड़ सकते हैं, जैसा कि दूसरों ने सुझाव दिया है, यदि आप अपने उपयोगकर्ता फ़ीडबैक देना चाहते हैं कि उन्होंने पहले ही मतदान कर दिया है:
validates :voter_id, uniqueness: { scope: [:votefor_id, :vote] }