缺少属性错误

时间:2015-12-23 00:02:21

标签: ruby-on-rails activerecord

我正在使用Rails,在设置我遇到的一些测试时:

ActiveModel::MissingAttributeError:
can't write unknown attribute `group_id`

我猜这个问题在我的关系中。我有

class Group < ActiveRecord::Base
    has_many :transactions
    has_many :users
end

class Transaction < ActiveRecord::Base
    belongs_to :group 
    belongs_to :user
end

最后,

class User < ActiveRecord::Base
    belongs_to :group
    has_many :transactions
end

我发现某人有同样的错误,因为他们使用的是has_one而不是belongs_to,并且需要在他们的数据库中添加ID列。我虽然使用belongs_to,所以我不认为我需要的是什么?有什么想法吗?

2 个答案:

答案 0 :(得分:1)

除非您创建了带有引用的迁移模型,否则您仍需要在数据库中进行迁移。检查数据库是否有数据库的简单方法是访问some_project_root/db/schema.rb。如果你没有看到你想要的领域,那么你将不得不生成一个。你这样做的方法是运行rails g migration AddXidToY x_id:integer。它应该为您想要的表中的id设置一个字段。

答案 1 :(得分:1)

您的数据库中似乎没有group_id列。

您必须记住,Rails是建立在relational database之上的,这意味着您可以通过引用foreign_key来访问“相关”数据。

设置belongs_to / has_many关联时,belongs_to表需要具有相应的外键(在您的情况下为group_id):

enter image description here

您的错误未说明您收到的例外模型;我猜测它是UserTransaction

-

要解决此问题,我建议您创建一个迁移,将group_id属性添加到相应的模型中:

$ rails g migration AddGroupId

#db/migrate/add_group_id____________.rb
class AddGroupID < ActiveRecord::Migration
   def change
      add_column :users, :group_id, :integer
   end
end

$ rake db:migrate