के बावजूद Mongoid बचत दस्तावेज़ मुझे यकीन नहीं है कि यह Mongoid के साथ या मानक रेल मान्यताओं के साथ एक समस्या है, लेकिन अमान्य दस्तावेज़ अभी भी डेटाबेस में सहेजे जा रहे हैं।अवैध कस्टम सत्यापन
मैं मॉडल की तरह कुछ करने के लिए स्थापित किया है:
class League
include Mongoid::Document
has_many :teams
validate do
if teams.size > 12
errors.add(:teams, 'too many teams')
end
end
end
class Team
include Mongoid::Document
belongs_to :league
end
मैं निम्नलिखित परीक्षा उत्तीर्ण की उम्मीद करेंगे, लेकिन ऐसा नहीं है। लीग में 12 से अधिक टीमों को जोड़ने से रोकने के मेरे कस्टम सत्यापन के बजाय, लीग को 13 टीमों के साथ भी बचाया जाता है।
# Factory for a League.
FactoryGirl.define do
factory :league do
name "Test League"
factory :league_with_teams do
ignore do
teams_count 5
end
after(:create) do |league, evaluator|
FactoryGirl.create_list(:team,
evaluator.teams_count,
league: league)
end
end
end
describe League do
it "should not allow more than 12 teams" do
league = FactoryGirl.create(:league_with_teams, teams_count: 12)
league.teams << FactoryGirl.create(:team)
league.should_not be_valid # passes
League.find(league.id).teams.size.should eq(12) # fails
end
end
अजीब बात यह है कि अगर मैं परीक्षण है जो बजाय निर्माण का उपयोग करें, league.teams << FactoryGirl.build(:team)
बनाने के लिए 13 वीं टीम कहते हैं में लाइन बदलने के लिए, तो परीक्षण से गुजरता है। हालांकि यह कोई समाधान नहीं है क्योंकि मैं यह गारंटी देना चाहता हूं कि लीग में 12 से अधिक टीमें नहीं हो सकती हैं, चाहे टीमों को जोड़ा जा रहा है या नहीं, डीबी में पहले से ही हैं या नहीं।
क्या यह गारंटी देने के लिए वैसे भी है?
संपादित
टीम मॉडल के लिए एक सत्यापनकर्ता जोड़ा जा रहा है, जैसे मैं नीचे था, या तो काम करने के लिए प्रतीत नहीं होता।
class Team
include Mongoid::Document
belongs_to :league
validate do |team|
if league.teams.size > 12
errors.add :base, "cannot have more than 12 teams in a league"
end
end
end
मेरा मानना है कि समस्या तथ्य यह है कि <<
और push
परमाणु संचालन कर रहे हैं के साथ क्या करना है, और इसलिए वे कॉलबैक और सत्यापन को छोड़ दें। कहा जा रहा है, यह एक काफी आम उपयोग होना चाहिए, नहीं? तो संदर्भित किए जा रहे दस्तावेजों की संख्या को प्रमाणित करने वाले अन्य लोग कैसे हैं?
सत्यापन टीम – apneadiving
कि इस मुद्दे को हल करने के लिए प्रतीत नहीं होता है में होना चाहिए। – Marcus
आपने वास्तव में क्या किया? – apneadiving