ActiveModel :: MissingAttributeError:无法写入未知属性`user_id`?

时间:2016-02-15 06:15:28

标签: ruby-on-rails model associations

我有联盟的架构

  create_table "leagues", force: :cascade do |t|
    t.string   "name",                           null: false
    t.date     "start_date",                     null: false
    t.date     "end_date"
    t.string   "day"
    t.string   "start_time",                     null: false
    t.integer  "practice_length",                null: false
    t.integer  "alley_id",                       null: false
    t.integer  "frequency",                      null: false
    t.integer  "scratch",          default: 220
    t.integer  "handicap_percent", default: 80
    t.integer  "handicap_round",   default: 0
    t.integer  "occurrences",                    null: false
    t.integer  "user_id",                        null: false
    t.datetime "created_at",                     null: false
    t.datetime "updated_at",                     null: false
  end

和模型

class Alley < ActiveRecord::Base
  belongs_to :address
  has_many :leagues
end

class User < ActiveRecord::Base
  has_many :leagues
end

class League < ActiveRecord::Base
  belongs_to :alley
  belongs_to :user
  has_many :teams
end

和工厂

factory :league do
  name Faker::Company.name
  start_date start_date
  end_date end_date
  day Date.today.day
  start_time '7:00pm'
  practice_length 10
  frequency 1
  occurrences weeks

  association :alley, factory: :alley
  association :user, factory: :user
end

factory :user do
  email 'test@example.com'
  password 'Test1234'
  password_confirmation { 'Test1234' }
end

factory :alley do
  name Faker::Company.name
  association :address, factory: :address
end

当我尝试创建联盟时,我收到错误

  

::加载ActiveModel MissingAttributeError:      无法写出未知属性user_id

它的设置与胡同完全一样,胡同也起作用。联盟应该被分配到一个小巷并分配给用户。一条小巷可以有很多联赛,用户可以有很多联赛。坦率地说,我太累了,无法弄清楚为什么现在还没有工作。

2 个答案:

答案 0 :(得分:2)

我一直在修改迁移(因为我正在获取初始数据集),我向下迁移,然后向上迁移。那是什么让我在哪里。我不得不删除数据库,然后运行安装程序。事情一定是陈旧的。

答案 1 :(得分:0)

就我而言,我的测试失败了。感谢@TIMBERings的答案,我得以缩小范围。

  

如果您创建的迁移没有索引,请向前迁移,然后添加   迁移文件的索引(或引用),迁移或回滚,   再次向前迁移,你就搞砸了

要修复失败的RSpec测试,我运行了以下内容,然后重新运行测试,结果通过了。

rails db:reset RAILS_ENV=test

您也可以简单地运行

rails db:reset