Установить комнаты для пользователей - PullRequest
0 голосов
/ 02 марта 2011

Я пытаюсь решить проблему, но не могу найти решение. Это мой код:

class User < AR::Base
  belongs_to :room
end

class Room < AR::Base
  has_many :users
end

class SetupRooms

  def initialize
    @users = User.all
    @rooms = Room.all
    @room_max_users = @users.size / @rooms.size
  end

  def setup
    groups = @users.in_groups_of(@room_max_users)
    # Now, How Can I fill rooms with users?
  end
end

Спасибо

Ответы [ 2 ]

1 голос
/ 02 марта 2011
def setup
  groups = @users.in_groups_of(@room_max_users)
  @rooms.zip(groups).each do |room, group| # now "room" is a Room and "group" is an Array of Users
    group.delete_if { |user| user.nil? } # in_groups_of pads with nil if there are leftover spaces
    room.users = group
  end
end
1 голос
/ 02 марта 2011

Вам не нужен метод инициализации. Вашу настройку можно записать так

def setup
  Room.all.each_with_index do |room, i|
    room.users = User.find(:all, :limit => room_max_users + i + 1)
    room.save 
  end
end

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

Кстати, этот метод должен быть определен как метод класса, возможно, для Room, чтобы вы могли вызывать его как

class Room < AR::Base
  has_many :users

  def self.fill_with_users
    Room.all.each_with_index do |room, i|
      room.users = User.find(:all, :limit => room_max_users + i + 1)
      room.save 
    end
  end    
end


Room.fill_with_users

Таким образом, вам также не понадобится ваш класс настройки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...