Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/jenkins/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 工厂女孩给定项目,如何取得权限?联想?_Ruby On Rails_Ruby On Rails 3_Rspec_Rspec2_Factory Bot - Fatal编程技术网

Ruby on rails 工厂女孩给定项目,如何取得权限?联想?

Ruby on rails 工厂女孩给定项目,如何取得权限?联想?,ruby-on-rails,ruby-on-rails-3,rspec,rspec2,factory-bot,Ruby On Rails,Ruby On Rails 3,Rspec,Rspec2,Factory Bot,我有以下型号: Users (id) Project (id, name) Roles (id, title) Permissions (user_id, role_id, project_id) 使用Factory Girl,我想创建一个包含2个用户、1个项目以及将2个用户与项目关联的权限的工厂 以下是我目前掌握的情况: Factory.define :user do |user| user.fname "James" user.lname

我有以下型号:

Users (id)
Project (id, name)
Roles (id, title)
Permissions (user_id, role_id, project_id)
使用Factory Girl,我想创建一个包含2个用户、1个项目以及将2个用户与项目关联的权限的工厂

以下是我目前掌握的情况:

Factory.define :user do |user|
  user.fname                  "James"
  user.lname                  "Bond"
  user.email                  "james.bond@intuit.com"
  user.password               "password"
  user.password_confirmation  "password"
end

Factory.define :project do |project|
  project.name              "myproject"
  project.private_email     "myproject"
  project.user_id do
    (User.find_by_email('james.bond@intuit.com')).id
  end
  project.instance_id do
    (User.find_by_email('james.bond@intuit.com')).instance_id
  end

  project.permissions {|permissions| [permissions.association(:permission)] }

end


Factory.define :permission do |permission|
  permission.role_id         1
  permission.creator_id do
    (User.find_by_email('james.bond@intuit.com')).id
  end  
  permission.user_id do
    (User.find_by_email('james.bond@intuit.com')).id
  end
  permission.project_id do
    (Project.find_by_name('myProject')).id
  end


end
但这是一个错误:

失败/错误:@project=Factory(:project) 运行时错误: 为nil调用id,它会错误地为4——如果您确实想要nil的id,请使用object_id


我是新来的工厂女孩,我做得对吗?谢谢

您希望利用关联方法将模型与其他模型关联起来

您可以执行以下操作:

 project.user {|i| i.association(:user)}

 permission.creator {|i| i.association(:user)}
 permission.project {|i| i.association(:project)}
等等

例如:

Factory.define :user do |u|
  u.sequence(:email) { |n| "mike#{n}@awesome.com"}
  u.password "funnyguy1"
  u.password_confirmation {|u| u.password }
 end

Factory.define :profile do |p|
  p.sequence(:username) { |n| "madmike#{n}"}
  p.user {|i| i.association(:user)}
end
您可以这样做,例如:

Factory.define :permission do |permission|
  permission.role_id         1
  permission.creator {|i| i.association(:user)}
  permission.user {|i| i.association(:user)}
  permission.project {|i| i.association(:project)}
end
我建议阅读FactoryGirl的github页面:


这是怎么回事?在工厂里。定义?还是单独的?这对Factory Girl Rails 3友好吗?是的,这是Rails 3兼容的,它会进入工厂。DefineJ也为此发布了一个示例。您可以执行类似于user1=Factory.create(:user,:permissions=>[Factory.create(:permission)]和user2=Factory.create(:user,:permissions=>[Factory.create(:permission)]的操作如果要创建具有两个单独权限的两个用户。