我不确定这是否可能,但让我们看看你们中是否有人能想出一个解决方案。就可读性而言,这或多或少与代码质量有关,而不是一个实际问题,因为我已经有了解决方案。我有一个友情模型和一个用户模型。friendship模型用于模拟两个用户之间的友谊:
class Friendship
def self.requested(user)
where(:user_id => user).where(:status => 'requested')
end
def self.pending(user)
where(:user_id => user).where(:status => 'pending')
end
def self.accepted(user)
where(:user_id => user).where(:status => 'accepted')
end
# ...
end
class User
has_many :friendships
# ...
end
是否有可能调用请求的、挂起的或接受的作用域不提供参数的用户模型?
a_user.friendships.pending # this does not work, is there a way to get it working?
a_user.friendships.pending(a_user) # works of course!
我认为如果去掉参数,这应该可以工作。像这样调用用户对象的pending off应该已经将友谊范围限定到适当的用户。像这样定义方法:
def self.pending
where(:status => 'pending')
end
和电话:
a_user.friendships.pending
如果您不确定生成的查询是否正常工作,请检查日志。
如果你仍然想通过传递参数来调用它,我将该方法命名为Friendship.pending_for(user)
。