Как магически снабдить области Active Record аргументами? - PullRequest
1 голос
/ 12 апреля 2011

Я не уверен, что это вообще возможно, но давайте посмотрим, найдется ли у кого-нибудь из вас решение.Это более или менее касается качества кода с точки зрения читабельности, а не реальной проблемы, потому что у меня уже есть решение.У меня есть модель дружба и модель пользователь .Модель дружба используется для моделирования дружбы между двумя пользователями:

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

Возможно ли как-то вызвать запрашиваемую, ожидающую или принятую область действия через модель пользователя без предоставления аргумента?1010 *

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!

1 Ответ

4 голосов
/ 12 апреля 2011

Я думаю, что это должно сработать, если вы уберете аргумент.Вызов, ожидающий отключения объекта пользователя, подобный этому, должен уже установить дружеские отношения с соответствующим пользователем.Определите метод следующим образом:

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

И вызов:

a_user.friendships.pending

Проверьте журналы для сгенерированного запроса, если вы не уверены, что он работает.

Есливы все еще хотите вызвать его, передав аргумент, который я назову этим методом Friendship.pending_for(user).

...