Ruby on Rails 5一对多关联

时间:2018-08-22 12:12:06

标签: ruby-on-rails ruby

我在与Rails协会建立一个基本的红宝石。我有一篇文章,其中有一项手术。但是,操作可以属于Article的许多实例。在Article类中,我指定了has_one :operation。 Articles表具有类型为integer的operation_id列。当我在测试中尝试访问Article(文章)实例的操作时:puts article.operation,出现以下错误:

  

ArticleTest#test_test:ActiveRecord :: StatementInvalid:   SQLite3 :: SQLException:没有这样的列:operations.article_id:SELECT   “操作”。*在“操作”中的“操作”中。“ article_id” =?   LIMIT?       test / models / article_test.rb:6:在

从错误中可以明显看出,rails正在操作表中查找,而应该在商品表中查找该关联。

我尝试在Operations模型中添加belongs_to: article,但它不会更改错误。我确定我遗漏了一些东西,但似乎无法通过文档和类似主题弄清楚。

1 个答案:

答案 0 :(得分:2)

从外观上,您需要在文章和操作之间建立“ belongs_to”关系。

更改

has_one :operation

belongs_to :operation

在您的运营模式中:

has_many :articles

您需要为您的文章指定一个operation_id:

rails g migration addOperationIdToArticles operation_id:integer
rake db:migrate

然后再次尝试命令。目前,尚无任何文章具有operation_id,因此任何文章都不属于任何操作,但是您可以使用以下方式分配关系:

article.update_attributes(operation_id: whatever)