我正在使用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
,所以我不认为我需要的是什么?有什么想法吗?
答案 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
):
您的错误未说明您收到的例外模型;我猜测它是User
或Transaction
。
-
要解决此问题,我建议您创建一个迁移,将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