我有一个包含状态的友谊模型。
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的友情来过滤我的用户的友情。一些类似的东西。
# In User Model
# Friendships
has_many :friendships do
def visible
# Where !friendship.status.hide
end
end所以在我的控制器中我可以这样做
user.friendships.visible不过,我不确定如何在这种方法中访问个人友谊。
发布于 2013-08-30 03:40:56
我认为你想要:
class User
has_many :friendships,
:class_name => "FriendStatusDescriptor",
:foreign_key => 'friendship_id'如果你想要过滤可见的和不可见的友谊,你可以向Friendship模型添加作用域:
class Friendship
scope :visible, -> { joins(:status).where("friend_status_descriptors.hide = ?", false) }然后应用该作用域:
user.friendships.visiblehttps://stackoverflow.com/questions/18519576
复制相似问题