我有用户.用户可以戳戳其他用户,也可以自己动手.每个戳都是方向性的,并且不存在组戳.我想列出给定用户的所有戳(传入或传出),而不重复自助(作为incoming_和outgoing_pokes存在).
这是我的模特:
class User < ActiveRecord::Base has_many :outgoing_pokes,:class_name => "Poke",:foreign_key => :poker_id has_many :incoming_pokes,:foreign_key => :pokee_id end class Poke < ActiveRecord::Base belongs_to :poker,:class_name => "User" belongs_to :pokee,:class_name => "User" end
def all_pokes outgoing_pokes.merge(incoming_pokes) end
但是它只返回自我戳(那些既是incoming_px也是outgoing_pokes).想法?是否有一种干净的方法直接使用关联?
此外,在合并列表中,每个poke都有两个布尔值可以记录它们与当前用户的关系.传出和传入的东西.
解决方法
你的all_pokes方法只返回self-pokes的原因是因为outgoing_pokes还不是一个数组,而是你可以链接的AR关系.在这种情况下,merge在执行之前组合查询.
您想要的是实际执行查询并合并结果集:
def all_pokes (outgoing_pokes.all + incoming_pokes.all).uniq end
…或者您可以编写自己的查询:
def all_pokes Poke.where('poker_id = ? OR pokee_id = ?',id,id) end
确定它是传入还是传出:
# in poke.rb def relation_to_user(user) if poker_id == user.id poker_id == pokee_id ? :self : :poker elsif pokee_id == user.id :pokee else :none end end
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。