Rails 4.2 응용 프로그램에서 Rolify gem을 사용하고 있습니다.왜 내 공장 정의에서 다른 것을 사용하지 못합니까?
작동하는 공장에서 시드 데이터를 사용하고 있습니다. 그러나, 내가 읽은 것으로부터, 그것을하는 올바른 방법이 아닙니다.
사양 파일에서 복잡한 공장 호출을 사용하지 않아도 올바르게 수행하는 방법에 대해 고민하는 데 문제가 있습니다. 나는 직원 모델에서 자신의 ID를 저장할 수 있도록 직원 이전에 생성 된 역할이 필요
require 'faker'
#Seed the database before running the tests only if in test mode
#Fixes problem with rake routes running this command and deleting out the database
Rails.application.load_seed if Rails.env.test?
FactoryGirl.define do
factory :employee do
first_name { Faker::Name.first_name}
last_name { Faker::Name.last_name}
sequence(:email) { |n| "peterjohnson#{n}@example.com" }
mobile 66816927867
bio "MyText"
address { Faker::Address.street_address}
province_state { Faker::Address.state}
country { Faker::Address.country}
postal_code { Faker::Address.postcode}
status :active
bachelor_degree "B.Sc"
password Faker::Internet.password(8)
sequence(:paypal_email) { |n| "paypal_peterJohnson#{n}@example.com" }
sequence(:skype_id) {|n| "peterjohnson_skype#{n}" }
os :mac
role_ids [Role.first.id]
trait :proofreader do
after(:create) {|employee| employee.add_role(:proofreader)}
end
trait :admin do
after(:create) {|employee| employee.add_role(:admin)}
end
trait :super_admin do
after(:create) {|employee| employee.add_role(:super_admin)}
end
end
end
:
여기 내 직원 공장입니다.
내 애플리케이션에서 직원이 등록되면 역할이 양식을 통해 추가됩니다. 따라서 일부 테스트의 역할을 추가하기 위해 애프터 애플릿을 만들 수는 없습니다.
factory :employee do
["proofreader", "admin", "super_admin"].each do |role|
FactoryGirl.create(:role, name: role)
end
first_name { Faker::Name.first_name}
...
이 나는 역할라는 이름의 공장을 찾을 수 없습니다 말해 오류가 다음과 같이
나는 직원 공장 내에서 역할을 생성합니다. 그것은 다음과 같이 존재합니다
여기FactoryGirl.define do
factory :role do
name :proofreader
end
end
인 직원이 역할이 있어야 유효성을 확인 내 직원 모델 :
class Employee < ActiveRecord::Base
# returns the full name of the employee. This code is found in a concern called name.rb
include Name
rolify
# Include default devise modules. Others available are:
# :confirmable, :lockable, :timeoutable and :omniauthable
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :trackable, :validatable
enum status: [:active, :vacation, :unemployed]
enum os: [:mac, :windows]
validates :first_name,
presence: true,
length: {minimum: 2}
validates :last_name,
presence: true,
length: {minimum: 2}
validates :email, email: true, presence: true, uniqueness: true
validates :paypal_email, email: true, presence: true, uniqueness: true
validates :skype_id, presence: true, uniqueness: true
validates :mobile, presence: true, numericality: true, length: {minimum: 10}
validates :address, :province_state, :country, :postal_code, :bachelor_degree, :os,:status, :role_ids, presence: true
end
그래서 어떻게 데이터베이스 시드가없는 역할을 가진 직원을 만들 수 있습니까?
'rake routes'는 여러분의 공장을 건드려서는 안됩니다. 'rake db : reset' 또는'rake db : seed'와 같은 것을 의미하지 않았습니까? – binarymason
나는 그렇지 않아야한다고 동의한다. 이상한 것은 Rails.application.load_seed가 Employees에 있다는 것을 제외하고는 명백한 이유없이 seeds.rb 파일을 실행한다는 것입니다.심지어 낯선 rb 공장. – chell