导致ArgumentError的简单Rails关联

时间:2014-11-27 09:49:15

标签: ruby-on-rails ruby rails-activerecord

编辑:这不是Can't migrate after scaffold in Hartl's tutorial的欺骗!为了以防万一,我在我的Gemfile中更新了Arel,但它没有任何区别。此外,这是POST迁移,rake完成得很好。但是在rake之后,当我尝试通过控制台查询关联时, 是我收到错误的时候!


我有两个模型,它们之间有一个简单的一对多关联。在添加第二个模型并对数据库进行调整之后,我打开了rails控制台来测试一些东西,每次我尝试在查询中使用关联时都会出错。

以下是课程:

class Startup < ActiveRecord::Base
  has_many :reqs
end

class Req < ActiveRecord::Base
  belongs_to :startup
end

这是Reqs表的迁移:

class CreateReqs < ActiveRecord::Migration
  def change
    create_table :reqs do |t|
      t.string :title
      t.text :desc
      t.integer :sort
      t.references :startup, index: true

      t.timestamps null: false
    end
  end
end

以下是我试图在控制台中测试的简单测试:

> startup = Startup.first
> startup.reqs              ## Generates ArgumentError
> startup.reqs.build        ## Generates same error

这是错误的开始:

  

ArgumentError:参数数量错误(1表示0)           来自/usr/local/rvm/gems/ruby-2.1.4@rails4/gems/activerecord-4.2.0.beta4/lib/active_record/connection_adapters/abstract_adapter.rb:271:in   `初始化&#39;           来自/usr/local/rvm/gems/ruby-2.1.4@rails4/gems/activerecord-4.2.0.beta4/lib/active_record/connection_adapters/abstract_adapter.rb:271:in

我仍然掌握了很多RoR的细节,所以请和我一起玩吧!但是从我以为我知道的情况来看,这种关联似乎很基础,我不知道从哪里开始修复它。谢谢你的帮助!

1 个答案:

答案 0 :(得分:0)

我认为这可能是Rails中的某种侥幸或错误。我今天早上再次尝试,rails控制台仍然给我同样的错误。然后只是为了踢,我尝试添加另一个相同的模型,只是使用不同的名称:

class CreateSkills < ActiveRecord::Migration
  def change
    create_table :skills do |t|
      t.string :title
      t.text :desc
      t.integer :sort
      t.references :startup, index: true

      t.timestamps
    end
  end
end

has_many skills添加到Startup.rb后,我回到了Rails控制台,现在两个关联(Startup.skillsStartup.reqs)工作得很好。出于好奇,我做了一个db:rollback并摧毁了Skill模型然后又回到了控制台。 Startup.reqs即使Skill不再存在仍然可以正常工作。

我不知道为什么这会有所作为,但是想发布对我有用的内容,以防其他人遇到类似的问题。尝试生成另一个模型以“重置”数据库,然后你可以回滚它,一切都可能适合你。