【问题标题】:Factory Girl has_many/has_many through with validationFactory Girl has_many/has_many 通过验证
【发布时间】:2017-07-24 18:33:57
【问题描述】:

我在正确设置我的工厂时遇到问题,通过验证将 has_many/has_many 或 has_and_belongs_to_many 关联。客户端模型/工厂已被省略,但它确实存在。通过与验证关联来设置 has_many 到 has_many 的最佳方法是什么,需要传入属性?

我尝试了几种方法使其无法成功运行。当前的相关代码如下(略有改动)。尝试了其他方法:在 client_team 上使用 after(:create) 和 before(:create) 创建 user_clients,在定义关联的 client_teams 和 user_clients 上使用特征,使用 build_list/create_list 代替 shovel 运算符。

ClientTeam 模型:

belongs_to :client
has_many :client_team_rosters
has_many :users, through: :client_team_rosters

用户模型:

belongs_to :client
has_many :client_team_rosters
has_many :client_teams, through: :client_team_rosters
validates_presence_of :client_teams

ClientTeamRoster 模型:

belongs_to :user
belongs_to :client_team

相关工厂:

factory :client_team do
  client
  team_name "stuff"
end

factory :client_team_roster do
  client
  user
end

factory :user do
  ...
  factory :user_client do
    client

    before(:create) do |user_client|
     client_team = user_client.client.client_teams.first
     user_client.client_team_rosters << FactoryGirl.build(:client_team_roster, user: user_client, client_team: client_team)
    end
  end
end

规格文件:

before(:each) do
  @client = create(:client)
  @client_team = create(:client_team, client: @client)
end

it "should do something" do
  user_client = create(:user_client, client: @client)
end

当前错误:

Validation failed: Client_teams can't be blank

【问题讨论】:

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


    【解决方案1】:

    呃,所以在发布这个之后,我决定做一个小的调整,它最终工作了。我不会删除问题,而是发布我的修复以在未来帮助其他人(希望减少试验和错误)

    在 user_client 工厂中,将回调更改为:

    before(:create) do |user_client|
     client_team = user_client.client.client_teams.first
     user_client.client_teams << client_team
    end
    

    这模仿了我们在代码库中设置模型的方式。我本可以发誓我早点尝试过,但这次尝试成功了

    编辑:我们还有一个继承自 :user_client 的工厂。在这些情况下, before(:create) 似乎不会触发。但是,这些继承的工厂可以在创建/构建时使用 :client_teams => [client_team] 进行初始化

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-01-29
      • 1970-01-01
      • 2015-03-23
      • 2016-12-03
      相关资源
      最近更新 更多