除了我在用户和艺术家模型之间设置的多态活动跟踪之外,我正在使用acts_as_follower gem。我现在试图在用户的节目视图中显示跟随艺术家的所有活动。起初,我以为我可以简单地使用宝石的all_follows方法创造艺术家的一个实例变量:获取相关对象的活动
current_user.all_follows
=> #<ActiveRecord::AssociationRelation [#<Follow id: 8, followable_id: 1, followable_type: "Artist", follower_id: 1, follower_type: "User", blocked: false, created_at: "2016-02-29 12:56:31", updated_at: "2016-02-29 12:56:31">]>
正如你可以看到它返回Follow
对象(S)主场迎战Artist
对象我期待找回。我不得不对Activity
类执行SQL查询另外一个设想:
Activity.where(followable_id: current_user.follows.pluck(&:id))
这给我的错误:
SQLite3::SQLException: no such column: activities.followable_id: SELECT "activities".* FROM "activities" WHERE "activities"."followable_id" IN (8, 1, 'Artist', 1, 'User', 'f', '2016-02-29 12:56:31.974244', '2016-02-29 12:56:31.974244')
ActiveRecord::StatementInvalid: SQLite3::SQLException: no such column: activities.followable_id: SELECT "activities".* FROM "activities" WHERE "activities"."followable_id" IN (8, 1, 'Artist', 1, 'User', 'f', '2016-02-29 12:56:31.974244', '2016-02-29 12:56:31.974244')
什么是检索这些记录的最好方法?
class Artist < ActiveRecord::Base
has_many :activities, as: :owner, dependent: :destroy
acts_as_followable
end
class User < ActiveRecord::Base
acts_as_follower
end
class Activity < ActiveRecord::Base
belongs_to :trackable, polymorphic: true
belongs_to :owner, polymorphic: true
end
class Follow < ActiveRecord::Base
extend ActsAsFollower::FollowerLib
extend ActsAsFollower::FollowScopes
belongs_to :followable, polymorphic: true
belongs_to :follower, polymorphic: true
end
class UsersController < ApplicationController
def show
@artist_activity = Activity.where(followable_id: current_user.follows.pluck(&:id))
end
end
你能发布你的模式.. –
在Activity表中没有名为'followable_id'的列,所以你不能这样做,并且'activity'和'follow'模型之间没有关系 –
你的环境是什么(ruby和rails版本)?我要复制你的设置,以便我可以和你一起工作。 – jvillian