Как поместить этот конкретный конструктор в объект FactoryGirl?
Я пытаюсь поместить этот код создания в FactoryGirl.
Итак, в основном здесь, вы можете видеть, что у моего класса User есть метод для создания изображения из его информации, идентификатора, made_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 ответ
Решение
В вашем коде 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