Ориентация на каждый объект в синтаксисе массива - PullRequest
0 голосов
/ 13 июля 2010

Новый вопрос дня:

Я пытаюсь выбрать всех пользователей с этим условием, а затем выполнить действие с каждым из них:

User.find(:all).select { |u| u.organizations.count > 0} do |user|

Кромеэто правильный способ сделать это.Не совсем уверен, каков правильный синтаксис.

Кто-нибудь из коллег-рубинов предлагает новичку руку?

Ответы [ 2 ]

2 голосов
/ 13 июля 2010

Возможно, вам лучше было бы сложить выборку в запросе с помощью:

User.find(:all, :conditions => "organization_id IS NOT NULL").each do |user|

Это только приведет к получению релевантных результатов из базы данных, поэтому будет меньше ненужных данных, извлекаемых и выбрасываемых.

РЕДАКТИРОВАТЬ: Как предлагается в комментариях, следующее было бы правильным для отношения многие ко многим, предполагая модель объединения, называемую членством (где пользователь has_many :organisations, :through => :membership) ...

User.all(:joins => "inner join memberships on memberships.user_id = users.id")
2 голосов
/ 13 июля 2010

Чтобы выполнить действие с каждым элементом коллекции, используйте метод each, например:

User.find(:all).select { |u| u.organizations.count > 0}.each do |user|
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...