1

我不确定这是否可行,但让我们看看你们中的某个人是否想出了解决方案。这或多或少与可读性方面的代码质量有关,而不是实际问题,因为我已经有了解决方案。我有一个友谊模型和一个用户模型。友谊模型用于模拟两个用户之间的友谊:

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!
4

1 回答 1

4

我认为如果您取消争论,这应该会起作用。像这样调用用户对象的挂起应该已经将友谊范围扩大到适当的用户。像这样定义方法:

def self.pending
  where(:status => 'pending')
end

并调用:

a_user.friendships.pending

如果您不确定它是否正常工作,请检查生成的查询的日志。

如果您仍想通过传递参数来调用它,我将命名该方法Friendship.pending_for(user)

于 2011-04-11T21:00:51.113 回答