سؤال

إنها ليست نوعًا من مشكلة التزامن التي قرأتها من قبل. الرمز بسيط للغاية. الموديل:

class User < ActiveRecord::Base
    attr_accessor :name, :email
    validates_uniqueness_of :email, :on => :create, :message => "must be unique"
 end

اختبار RSPEC:

require 'spec_helper'
describe User do
    before(:each) do
       @valid_attributes = {
           :name => "Foo Bar",
           :email => "foo@bar.com"
        }
     end  
    it "should reject duplcate email address" do
        User.create!(@valid_attributes)
        duplicate_user = User.new(@valid_attributes)
        duplicate_user.should_not be_valid
     end
  end

أقوم بتشغيل الاختبار ، وأتلقى رسالة خطأ:

----------------------------
1)
'User should reject duplcate email address' FAILED
expected #<User id: nil, name: nil, email: nil, created_at: nil, updated_at: nil> not to be valid
/Users/mac/workspace/rails_space/uniq/spec/models/user_spec.rb:14:

Finished in 0.067908 seconds

1 example, 1 failure
-----------------------------

أقوم بتشغيل البرنامج النصي/وحدة التحكم ، وأنشئ كائنين مستخدمين مع نفس عنوان البريد الإلكتروني. إنه أمر جيد ، ولم تحدث رسالة التحقق من صحة ، وقد تم إدراج كلاهما في الجدول. أنا لا أخطأ في ذلك.

إصدار Rails الخاص بي هو 2.3.8 و RSPC هو 1.3.0.

هل كانت مفيدة؟

المحلول

أعتقد أن المشكلة هي attr_accessor الخط الذي لديك. إذا كان لديك أسماء الأعمدة هذه ، فسيتخطى الملحق اسم العمود وهذا مجرد جزء من الفصل ولا يهتم بالتفرد. إذا كان لديك طرق ملحق ، فيجب أن تعود إلى قاعدة البيانات بطريقة ما. إذا كنت بحاجة إلى الحصول على الملحق ، فأنت بحاجة إلى ربطه بقاعدة البيانات عن طريق الاتصال write_attribute.

لمزيد من المعلومات ، يمكنك رؤية الوثائق الخاصة بـ "الكتابة الافتراضية" على http://api.rubyonrails.org/classes/activerecord/base.html

آمل أن يساعد هذا!

نصائح أخرى

أعتقد أن القضية هي أنك تقول:

validates_uniqueness_of :email, :on => :create

user.new قد لا يؤدي إلى هذا التحقق من الصحة. حاول الاتصال DIPPLICITY_USER.SAVE! ومعرفة ما إذا كان هذا يلقي خطأ.

يمكنك المحاولة مثل المتابعة

attr_accessible :email
validates_uniqueness_of :email, :on => :create, :message => "must be unique"
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top