我正在跟踪以下表格:
Story (id, user_id, content)
Vote (id, user_id, story_id)
Flag (id, user_id, story_id)
etc..
带有活动表:
Activity (id, user_id,action, trackable_id, trackable_type)
关系表:
Relationship (id, follower_id, followed_id)
我目前正在接收用户正在关注的用户的活动:
def get_activity_from_followers(current_user)
followed_user_ids = "SELECT followed_id FROM relationships
WHERE follower_id = :user_id"
where("user_id IN (#{followed_user_ids})",
user_id: user.id)
end
我的问题是,我如何获得可跟踪表(例如,故事,投票,旗帜)所属的活动。
所以现在我得到的东西是:
我也希望得到类似的东西:
我该如何解决这个问题?感谢。
答案 0 :(得分:1)
我建议您使用以下类定义和关联:
# User class User :trackable end # Flag (id, user_id, story_id) class Flag :trackable end # with an activity table: # Activity (id, user_id,action, trackable_id, trackable_type) class Activity true end # The relationship table: # Relationship (id, follower_id, following_id) class Relationship "User" belongs_to :following, :class_name => "User" end
现在,让我们找到您关注的用户的活动:
# List activities of my followings Activity.where(:user_id => current_user.followings)
列出我的活动
current_user.activities
答案 1 :(得分:0)
为了解决这个问题,我使用投票和标记ID来搜索活动,而不是用户ID#s。像这样:
def get_votes(current_user)
stories = current_user.stories
votes = Votes.where(story_id: stories.map {|s| s.id})
activity = Activity.where(action: 'vote', trackable_id: votes.map{|v| v.id})
end
我发布了一些假设。首先,您可以调用user.stories
,然后调用活动模型'操作'可以是投票或标志,trackable_id与投票和标志ID相关。如果这不正确,无论如何你都可以得到一般的想法。
希望有所帮助
答案 2 :(得分:0)
如何制作活动STI课程?
class Story < ActiveRecord::Base
belongs_to :user
end
class Activity < ActiveRecord::Base
belongs_to :story
belongs_to :user
end
class Vote < Activity
def to_partial_path
'users/vote'
end
end
class Flag < Activity
def to_partial_path
'users/flag'
end
end
您可以将所有用户操作存储在同一个表中,并通过以下方式从中获取:
Activity.where(user_id: uid).all
并且您获得所有用户操作的返回数组,并且每个操作都有正确的输入,这允许您为不同类型的操作实现多态逻辑(对于我的示例中的部分路径,它允许您编写类似于: / p>
render Activity.where(user_id: uid).all