फैक्ट्रीगर्ल एक एनम मान्य पैरामीटर को आवंटित नहीं कर सकता - रूबी-ऑन-रेल, एक्टिव्रेकॉर्ड, आरएसपीसी, एनम्स, फैक्ट्री-बॉट

मैं आरएसपीसी, फैक्टरीगर्ल और एक्टिव रिकार्ड का उपयोग कर रहा हूं। निम्नलिखित परीक्षण पास नहीं हो रहा है:

require "spec_helper"
describe User, type: :model do
it "has a valid factory" do
expect(FactoryGirl.create(:user)).to be_valid
end
end

मुझे निम्न त्रुटि है:

1) User has a valid factory
Failure/Error: expect(FactoryGirl.create(:user)).to be_valid
ActiveRecord::RecordInvalid:
Validation failed: Role can"t be blank

मेरे पास निम्न मॉडल भी है:

class User < ActiveRecord::Base
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :trackable, :validatable
enum role: [:admin, :student, :school]
validates :role, presence: true
end

और मेरे पास निम्नलिखित कारखाना है:

require "faker"
FactoryGirl.define do
factory :user do
sequence(:email) { |n| "person#{n}@example.com" }
password Faker::Internet.password(8, 16)
role :student
end
end

हालांकि, अगर मैं मॉडल में enums को हटा देता हूं तो यह गुजरता है:

class User < ActiveRecord::Base
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :trackable, :validatable
validates :role, presence: true
end

मैं enum रखना चाहता हूं क्योंकि स्ट्रिंग्स का केवल एक सेट है जिसे मैं प्रतिनिधित्व भूमिकाओं को अनुमति देना चाहता हूं।

मैं सूचना की सराहना करता हूं जो मुझे फैक्ट्रीगर्ल को enum के साथ सही ढंग से मर्ज करने में मदद करेगा।

उत्तर:

उत्तर № 1 के लिए 1

उपयोगकर्ता के लिए आपकी फैक्ट्री परिभाषा में, आपने भूमिका निभाई है role :student। एनम्स को पूर्णांक के रूप में संग्रहीत किया जाता है, स्ट्रिंग के रूप में नहीं - आपकी परिभाषा को काम करने के लिए, आपको कुछ चाहिए role User.roles["student"]

देख http://api.rubyonrails.org/classes/ActiveRecord/Enum.html अधिक जानकारी के लिए।


जवाब के लिए 0 № 2

@ यूजीन के जवाब पर प्रयोग करते हुए, अब मैं देखता हूं कि मुझे कॉलम को पूर्णांक के रूप में बनाना था और मैंने इसे स्ट्रिंग के रूप में घोषित किया था:

class AddRoleToUser < ActiveRecord::Migration
def change
add_column :users, :role, :string, null: false
end
end

मैंने अपनी त्रुटि को ठीक करने के लिए निम्न माइग्रेशन चलाया और यह काम किया:

class ChangeRoleRepresentationInTable < ActiveRecord::Migration
def change
change_column :users, :role, "integer USING CAST(role AS integer)", null: false
end
end

संबंधित सवाल
सबसे लोकप्रिय