заводская девушка - данный проект, как сделать разрешения?Ассоциации? - PullRequest
1 голос
/ 20 марта 2011

У меня есть следующие модели:

Users (id)
Project (id, name)
Roles (id, title)
Permissions (user_id, role_id, project_id)

С помощью Factory Girl я хочу создать фабрику, включающую 2 пользователей, 1 проект и разрешения, связывающие двух пользователей с проектом.

Вот что у меня есть:

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 (: проект) Ошибка выполнения: Вызывается id для nil, который по ошибке будет равен 4 - если вы действительно хотите id nil, используйте object_id

Я новичок в фабрике, я правильно делаю? Спасибо

1 Ответ

3 голосов
/ 20 марта 2011

Вы хотите воспользоваться методом ассоциации, чтобы связать модели с другой.

Вы бы сделали что-то вроде:

 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

Я бы предложил прочитать страницу github для FactoryGirl:

https://github.com/thoughtbot/factory_girl

...