在请求我的示例应用程序的主页时,我收到以下错误消息(遵循Michael Hartl的教程第11章):
“ActiveRecord::HasManyThroughSourceAssociationNotFoundError in Pages#home”
“Could not find the source association(s) :followed_id in model Relationship. Try ‘has_many :followed_users,:through => :relationships,:source => ‘. Is it one of :follower or :followed?”
这真的很奇怪,因为我完全按照教程的说明进行操作.我甚至复制粘贴每个代码片段.
我的用户模型(摘录):
- class User < ActiveRecord::Base
- has_many :relationships,foreign_key: "follower_id",dependent: :destroy
- has_many :followed_users,through: :relationships,source: "followed_id"
- has_many :reverse_relationships,foreign_key: "followed_id",class_name: "Relationship",dependent: :destroy
- has_many :followers,through: :reverse_relationships,source: :follower
我的关系模型:
- class Relationship < ActiveRecord::Base
- attr_accessible :followed_id
- belongs_to :follower,class_name: "User"
- belongs_to :followed,class_name: "User"
- validates :follower_id,presence: true
- validates :followed_id,presence: true
- end
我的迁移文件:
- class CreateRelationships < ActiveRecord::Migration
- def change
- create_table :relationships do |t|
- t.integer :follower_id
- t.integer :followed_id
- t.timestamps
- end
- add_index :relationships,:follower_id
- add_index :relationships,:followed_id
- add_index :relationships,[:follower_id,:followed_id],unique: true
- end
- end
解决方法
发现错误:
在我的用户模型中,我不得不改变
在我的用户模型中,我不得不改变
- has_many :followed_users,source: "followed_id"
至
- has_many :followed_users,source: :followed
在Hartl的教程清单11.10 http://ruby.railstutorial.org/book/ruby-on-rails-tutorial#code:has_many_following_through_relationships中似乎是一个错字,因为那是我得到的“source:”follow_id“”代码.
我从Hartl的github“示例应用程序”中获得了固定代码.