如何将这个特定的构造函数放入FactoryGirl对象?

时间:2015-04-08 10:15:54

标签: ruby-on-rails ruby factory-bot

我正在尝试将该创建代码放入FactoryGirl中。

所以基本上在这里,你可以看到我的类User有一个方法来从他的信息,id,created_at等创建一个图片....

class User 
has_many :pictures

def create_picture
    picture = Picture.new(
        user_id: self.id,
        store_dir: get_user_medias_path,
    )
    picture.save!
    picture
end

def get_user_media_path
   "u/#{self.id}/#{self.created_at}
end


end

所以我试着把它放到FactoryGirl对象中,看起来如下

FactoryGirl.define do
  factory :user do
    sequence(:name) { |i| "flav_#{i}" }
  end

  factory :picture do
    store_dir user.get_user_medias_path
    remote_url "http://lorempixel.com/600/600/animals/internet#{user.id}/"
    association :user     
  end
end

但正如您所料,他找不到user.id或user.method。

我应该如何在图片对象中引用用户属性?

我迷路了。任何帮助都会受到欢迎。 =)

1 个答案:

答案 0 :(得分:0)

在您的代码user中,在工厂定义的上下文中调用,它没有这样的方法。你需要在实际构建的对象上调用user,图片。

为此,您应该在块中包装计算值:

factory :picture do
  store_dir { user.get_user_medias_path }
  remote_url { "http://lorempixel.com/600/600/animals/internet#{user.id}/" }
  association :user     
end

请参阅文档中的lazydependent属性。