【问题标题】:Rails Fabricator gem with mongoid has_many_and_belongs_to relationship具有 mongoid has_many_and_belongs_to 关系的 Rails Fabricator gem
【发布时间】:2014-06-06 17:42:13
【问题描述】:

我正在尝试构建一个具有嵌套元素并与另一个类具有 HMABT 关系的类。这是我的课

class Quote

  has_and_belongs_to_many :providers
  belongs_to :user 

class Provider

  has_and_belongs_to_many :quotes 
  belongs_to :user
  embeds_many :workdones


class Workdone
  embedded_in :provider  
  embeds_many :prices

class Price
  embedded_in :workdone

这些是我的制造商

Fabricator(:price) do 
  workdone
  variation_id {Fabricate(:variation)._id}
  price {12}
  discount {5} 
end 

usern = Faker::Name.last_name
uidn = Faker::Number.number(10) 
Fabricator(:user) do
    uid 123456
    username {usern }
    email {Faker::Internet.email}
    username_or_uid { [ usern , uidn] }
    provider {'facebook'}
    name {Faker::Name.name }
    gender {'male'}
    birthday { Time.at(rand * (18.years.ago.to_f - 50.years.ago.to_f) + 50.years.ago.to_f).to_date } 
end

Fabricator(:workdone) do 
    provider 
    workdonecount {1}
    quotegivencount {1}
    rating {5}
    active {true}
    give_price {true}
end


Fabricator(:provider) do
  user 
  business_address {"Bostanlı Mh., 6352. Sokak No:15, 35480 İzmir, Türkiye"}
  business_description {"Biz de sadece epilasyon işleriyle uğraşıyoruz ve bu işlerin  
  quote(count: 1)

 Fabricator(:quote) do 
    user  
    providers(count: 3) { Fabricate(:price).workdone.provider } 
    share_on_facebook_timeline {false} 
    customer_address {"Bostanlı Mh., 6352. Sokak No:15, 35480 İzmir, Türkiye"}
    description {"dasdsadasdsad sadadsssssdsadsasdas"}
    location {[27.094637499999976,38.4621336 ] }
    variation_id { Fabricate(:variation)._id}
end

当我用 Fabricate(:quote) 制造报价时

它给出了这个错误信息

   Quote#give_quote works
     Failure/Error: Unable to find matching line from backtrace
     SystemStackError:
       stack level too deep

当我从提供程序制造商中删除报价(计数:1)时,它会发出此错误。 顺便说一下,这适用于 Rails 控制台 - 提供者已创建。

Failure/Error: quote = Fabricate(:quote)
     TypeError:
       no implicit conversion of nil into String
     # ./spec/fabricators/quote_fabricator.rb:4:in `block (2 levels) in <top (required)>'
     # ./spec/models/quote_spec.rb:51:in `block (3 levels) in <top (required)>'

当我完全删除提供者时(计数:3){ Fabricate(:price).workdone.provider } 来自报价制造商测试的关联通过但当然没有创建供应商

有人知道如何创建提供程序吗?

【问题讨论】:

    标签: ruby-on-rails-4 mongoid fabrication-gem


    【解决方案1】:

    是否可以从生成的用户中为该报价提取三个提供者?您可以使用下面的 Fabricator 定义来做到这一点。

    Fabricator(:quote) do user providers { |attrs| attrs[:user].providers.sample(3) } share_on_facebook_timeline false customer_address "Bostanlı Mh., 6352. Sokak No:15, 35480 İzmir, Türkiye" description "dasdsadasdsad sadadsssssdsadsasdas" location [27.094637499999976,38.4621336] variation_id { Fabricate(:variation)._id } end

    此外,如果您要动态生成值,则只需要使用块语法。对于所有静态值,直接传递它们(如上所示)会减少一些开销。

    【讨论】:

    • 我实际上解决了这个问题。问题是我几乎无法发现的 gmaps4rails gem 使用的空空间点值。顺便用您的答案更新了我的代码,感谢您的帮助以及您对制作 gem 的巨大贡献。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-11
    相关资源
    最近更新 更多