Rails:ActiveRecord has_many关联不起作用

时间:2013-12-09 03:03:44

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

我对Rails Active Record协会有点新意。我试图建立一种关系,但是当我尝试检索数据时,我收到ActiveRecord错误。我是否错误地关联了我的模型?

用户有许多上传,其中包含许多UserGraphs:

class User < ActiveRecord::Base
  has_many :uploads, through: :user_graphs
end

class Upload < ActiveRecord::Base
  has_many :users, through: :user_graphs
end

class UserGraph < ActiveRecord::Base
  belongs_to :user
  belongs_to :upload
end

我希望获得用户的所有上传内容以及所有用户的图表。第二行在rails控制台中不起作用并发出错误

@user = User.find(1)
@uploads = @user.uploads

错误:

ActiveRecord::HasManyThroughAssociationNotFoundError: Could not find the association :user_graphs in model User

额外信用:

如果用户拥有包含UserGraphs的上传内容......不应该是has_many :uploadshas_many :user_graphs, through :uploads吗?

2 个答案:

答案 0 :(得分:4)

添加

has_many :user_graphs

UserUpload类。

:through选项定义了第二个关联。

答案 1 :(得分:2)

您没有告诉Rails user_graphs上有User个关联,只有uploads个关联。因此,当Rails跟随user_graphs上的uploads关联时,它无法找到它。

因此,您需要添加user_graphs关联。您的模型应如下所示:

class User < ActiveRecord::Base
  has_many :user_graphs                       # <<< Add this!
  has_many :uploads, through: :user_graphs
end

class Upload < ActiveRecord::Base
  has_many :user_graphs                       # <<< Add this!
  has_many :users, through: :user_graphs
end

class UserGraph < ActiveRecord::Base
  belongs_to :user
  belongs_to :upload
end