编辑:这不是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的细节,所以请和我一起玩吧!但是从我以为我知道的情况来看,这种关联似乎很基础,我不知道从哪里开始修复它。谢谢你的帮助!
答案 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.skills
和Startup.reqs
)工作得很好。出于好奇,我做了一个db:rollback
并摧毁了Skill
模型然后又回到了控制台。 Startup.reqs
即使Skill不再存在仍然可以正常工作。
我不知道为什么这会有所作为,但是想发布对我有用的内容,以防其他人遇到类似的问题。尝试生成另一个模型以“重置”数据库,然后你可以回滚它,一切都可能适合你。