首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >按其他关联过滤关联

按其他关联过滤关联
EN

Stack Overflow用户
提问于 2013-08-30 03:34:50
回答 1查看 32关注 0票数 0

我有一个包含状态的友谊模型。

代码语言:javascript
复制
class Friendship < ActiveRecord::Base
  attr_accessible :friend_id, :user_id, :source_id

  after_create :check_friend_status

  # Relationships
  belongs_to :user, :touch => true
  belongs_to :friend, :class_name => "User", :touch => true
  belongs_to :source

  has_one :status, :class_name => "FriendStatusDescriptor", :foreign_key => 'friendship_id'


  validates_uniqueness_of :user_id, :scope => [:friend_id, :source_id]


  def check_friend_status
    # Check user/friend for existing friend status
    if FriendStatusDescriptor.find(:first, :conditions => ["friendship_id = ?", self.id]).nil?
        status = FriendStatusDescriptor.new
        status.friendship_id = self.id
        status.save
    end
  end
end

class FriendStatusDescriptor < ActiveRecord::Base
  attr_accessible :alert, :friendship_id, :hide

  belongs_to :friendship

  validates_uniqueness_of :friendship_id

end

状态模型有一个名为hide的布尔变量。我希望能够通过hide设置为false的友情来过滤我的用户的友情。一些类似的东西。

代码语言:javascript
复制
      #  In User Model
  # Friendships
  has_many :friendships do
    def visible
         #  Where !friendship.status.hide
    end
  end

所以在我的控制器中我可以这样做

代码语言:javascript
复制
 user.friendships.visible

不过,我不确定如何在这种方法中访问个人友谊。

EN

回答 1

Stack Overflow用户

发布于 2013-08-30 03:40:56

我认为你想要:

代码语言:javascript
复制
class User
  has_many :friendships,
    :class_name => "FriendStatusDescriptor",
    :foreign_key => 'friendship_id'

如果你想要过滤可见的和不可见的友谊,你可以向Friendship模型添加作用域:

代码语言:javascript
复制
class Friendship
  scope :visible, -> { joins(:status).where("friend_status_descriptors.hide = ?", false) }

然后应用该作用域:

代码语言:javascript
复制
user.friendships.visible
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18519576

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档