【问题标题】:Factory Girl has_one through relationship?Factory Girl has_one 通过关系?
【发布时间】:2014-01-11 22:10:51
【问题描述】:

我很难设置 Factory Girl 来模仿我的模特联想。我认为问题在于我没有正确设置“用户通过订阅有一个计划”关联。非常感谢任何帮助!

我收到此错误:

 Failure/Error: let(:plan) {FactoryGirl.create(:plan, :user => user) }
 NoMethodError:
   undefined method `user=' for #<Plan:0x007fd836a1a340>

我的模型如下:

用户.rb

has_one :subscription
has_one :plan, :through => :subscription
has_many :projects

项目.rb

belongs_to :user

Plan.rb

has_many :subscriptions

订阅.rb

belongs_to :plan
belongs_to :user

还有我的 FactoryGirl 代码

FactoryGirl.define do

  factory :user do

    first_name "Joel"
    last_name "Brewer"
    email { "#{first_name}.#{last_name}@example.com".downcase }
    password "booyabooya"
    password_confirmation "booyabooya"
    user_type "entrepreneur"
  end

  factory :plan do |f|
    f.association :user
    f.plan_type "entrepreneur"
    f.plan_level "bronze"
    f.user_project_limit '1'
 end

  factory :subscription do |f|
    f.association :user
    f.association :plan
    f.stripe_card_token "Test card token"
    f.stripe_customer_token "Test customer token"
    f.email "joel.brewer1@example.com"
  end

  factory :project do
    title "Sample Project"
    user
  end
end

【问题讨论】:

  • 如果您已经知道问题的根源,为什么不解决它?您只是没有在计划中定义 user 关系,所以 rails 无法弄清楚。

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


【解决方案1】:

user= 上的未定义方法错误是因为您没有为Plan 定义user 字段,但在您的:plan 工厂中有association :user。假设您只想通过订阅将计划与用户相关联,您需要将association :user 从我们的:plan 工厂中取出。

我并不完全清楚您可以使用哪些选项来处理您遇到的情况,但假设您打算使用工厂调用是在您创建计划的同时为指定用户创建订阅,那么下面的(未经测试的)方法应该可以工作,取自https://github.com/thoughtbot/factory_girl/blob/master/GETTING_STARTED.md

factory :plan do
  plan_type "entrepreneur"
  plan_level "bronze"
  user_project_limit '1'

  factory :plan_with_subscription do
    ignore { user }
    after(:create) do |plan, evaluator|
      create(:subscription, plan: plan, user: evaluator.user)
    end
  end

end

您需要将调用更改为使用:plan_with_subscription 而不是:plan 来创建订阅。

【讨论】:

  • 嗯。我觉得这个答案很接近,但是,我仍然收到此错误:Failure/Error: let(:plan) {FactoryGirl.create(:plan, user: user) } NoMethodError: undefined method user=` for #<0x..>
  • &gt;&lt;&gt;
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-24
  • 1970-01-01
  • 1970-01-01
  • 2012-02-03
  • 1970-01-01
相关资源
最近更新 更多