【问题标题】:Create HABTM relationship in FactoryGirl?在 FactoryGirl 中创建 HABTM 关系?
【发布时间】:2015-12-01 11:02:34
【问题描述】:

我有以下几点:

    class Group < ActiveRecord::Base
      has_and_belongs_to_many :users
      has_many :permissions
      has_one :city
    end


    class User < ActiveRecord::Base
      has_many :permissions, dependent: :destroy
      has_and_belongs_to_many :groups
    end

    FactoryGirl.define do
      factory :user do
        username            { FFaker::Name.first_name }
        email               { FFaker::Internet.email }
        first_name          { FFaker::Name.first_name }
        last_name           { FFaker::Name.last_name }
        current_login_ip "127.0.0.1"
        login_count         { rand(100) + 1 }
        deleted_at nil
        updated_at          { FactoryGirl.generate(:time) }
        created_at          { FactoryGirl.generate(:time) }
        suspended_at nil
        password "password"
        password_confirmation "password"
        vertical {1}
        marketplace_role {1}
      end

      factory :admin do
        admin true
      end


      factory :group do
        users { |a| [a.association(:user)] }
        name                { FFaker::Company.name }
        city                { FactoryGirl.create(:city) }
      end
    end

    FactoryGirl.define do
      factory :permission do
        user
        group
        asset               { fail "Please specify :asset for the permission" }
        updated_at          { FactoryGirl.generate(:time) }
        created_at          { FactoryGirl.generate(:time) }
      end
    end

 factory :city do
    name              { FFaker::Name.name }
  end

  factory :zone do
    city
    name              { FFaker::Name.name }
  end

  factory :location do
    zone
    name              { FFaker::Name.name }
  end

失败/错误:@group = FactoryGirl.create(:group) ActiveModel::MissingAttributeError: 无法写入未知属性 group_id

这就是我得到的。我无法定义和使用组工厂。我查看了这个post,但解决方案不起作用。

【问题讨论】:

  • 请出示city工厂
  • 添加了城市工厂。

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


【解决方案1】:

将城市工厂改为以下

 factory :city do
    group             nil # or group_id if you will
    name              { FFaker::Name.name }
  end

而且你很可能会很好。

【讨论】:

  • 我得到了 # 的未定义方法 `group='。尽管组有一个城市,但城市不属于组。
  • 是因为你要把group_id加到cities表中,不然怎么会属于_to组呢? :)
  • 组似乎有city_id,而不是相反。
  • 那么组应该属于城市,而城市 has_one :group - 你有点混淆了关联:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-04-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多