【发布时间】:2014-07-05 04:08:28
【问题描述】:
我在通过 FactoryGirl 验证我的数据时遇到问题。
对于 team.rb,自定义验证是 has_only_one_leader 和 belongs_to_same_department
class Team < ActiveRecord::Base
attr_accessible :name, :department, :active
has_many :memberships
has_many :users, through: :memberships
accepts_nested_attributes_for :memberships, :users
validates :department, inclusion: [nil, "Architectural", "Interior Design"]
validates_uniqueness_of :name, scope: :department, conditions: -> { where(active: true) }
validate :has_only_one_leader
validate :belongs_to_same_department
def has_only_one_leader
unless self.users.where!(designation: "Team Leader").size == 1
errors.add(:team, "needs to have exactly one leader")
end
end
def belongs_to_same_department
unless self.users.where!.not(department: self.department).size == 0
errors.add(:users, "should belong to the same department")
end
end
我还将包含membership.rb 和user.rb(仅限关联)仅供参考。
class Membership < ActiveRecord::Base
belongs_to :team
belongs_to :user
end
class User < ActiveRecord::Base
has_many :memberships
has_many :teams, through: :memberships
end
这是我的team.rb工厂
FactoryGirl.define do
factory :team do
sequence(:name) {|n| "Team #{n}" }
department "Architectural"
before(:create) do |team|
team.users << FactoryGirl.create(:user, designation: "Team Leader",
department: "Architectural")
team.users << FactoryGirl.create_list(:user, 5,
designation: "CAD Operator", department: "Architectural")
end
end
end
似乎在我在 rails 控制台中执行FactoryGirl.create(:team) 之后,我似乎从我的验证中收到了错误消息。
当我手动建立团队时,我注意到了两件事,特别是向团队添加成员,其中有 1 名领导者和 5 名成员属于同一部门:
team.users.where!(designation: "Team Leader").size返回6尽管只有一名领导,将名称更改为 CAD 操作员也是如此,尽管团队中只有五名非领导,但返回6。检查成员是否在同一个部门也是如此,
team.users.where!.not(department: team.department).size返回6,尽管他们都属于同一个部门。
在我的模型或工厂中是否需要进行任何修改?
【问题讨论】:
标签: ruby-on-rails ruby validation factory-bot