【问题标题】:Dependent attributes with Factory Girl工厂女孩的依赖属性
【发布时间】:2014-04-21 08:42:39
【问题描述】:

我有playlist entriesepisodes。每个播放列表条目都指向一个剧集。每集确实有一个持续时间(以秒为单位)。现在我想用工厂女孩创建一个播放列表条目。但是我必须从start_timeduration of the episode 计算播放列表条目的end_time。我怎样才能做到这一点?我尝试使用此代码,但不起作用:

FactoryGirl.define do
  factory :playlist_entry_episode, class: PlaylistEntry do
    start_time Faker::Business.credit_card_expiry_date
    episode
    end_time {start_time + self.episode.duration}
    premiere false
    channel_playlist
  end
end

如何访问因episode 关联而自动创建的剧集的持续时间?

当执行使用这个工厂的规范时,我得到NoMethodError: undefined method 'duration' for nil:NilClass。我认为这是因为 self.episodenil

这是episode的工厂:

FactoryGirl.define do

  factory :episode do
    title Faker::Lorem.paragraph(1)
    link Faker::Internet.url
    pub_date Faker::Business.credit_card_expiry_date
    guid Faker::Lorem.characters(10)
    subtitle Faker::Lorem.paragraph(1)
    content Faker::Lorem.paragraph(5)
    duration Faker::Number.number(6)
    flattr_url Faker::Internet.url
    tags Faker::Lorem.paragraph(1)
    icon_url Faker::Internet.url
    audio_file_url Faker::Internet.url
    cached false
    local_path ""
    filesize Faker::Number.number(6)
    podcast
  end
end

【问题讨论】:

    标签: ruby-on-rails factory-bot


    【解决方案1】:

    其中一种变体是使用before(:create)

    FactoryGirl.define do
      factory :playlist_entry_episode, class: PlaylistEntry do
        start_time Faker::Business.credit_card_expiry_date
        episode
        premiere false
        channel_playlist
    
        before(:create) do |entry|
          entry.end_time = entry.start_time + entry.episode.duration
        end
      end
    end
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-06
      • 1970-01-01
      • 2012-10-18
      相关资源
      最近更新 更多