Создайте глобальный массив для каждого пользователя в ruby - PullRequest
0 голосов
/ 30 января 2011

У меня есть проблема, и я пытаюсь найти лучший / самый простой способ решить эту проблему ...

В моем приложении несколько пользователей. приложение позволяет пользователям добавлять книги в список очередей чтения (например, список книг, на которые пользователь может следить).

Первоначально я установил список очереди чтения как глобальный массив. Однако это означало, что несколько пользователей добавляли книги в один глобальный массив. Если бы user1 добавил 3 книги, user2 также увидел бы эти 3 книги. Или, если user1 очистил список очереди чтения, книги user2 также были очищены.

Возможные решения:

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

  2. Может быть, создать таблицу базы данных "queue-list" ... но, похоже, многое нужно сделать для чего-то подобного ...

  3. Возможно, создать глобальный массив, уникальный для каждого пользователя. (Мне нравится этот, но не уверен, как это сделать)

Надеюсь, это понятно, я довольно новичок в рельсах, поэтому любая помощь приветствуется!

моя попытка решения 3:

books_controller.rb

def add_book_to_queue
  user = User.find(params[:id])
  user.read_queuelist.push(params[:book_info])
  @readlist = user.read_queuelist
end

user.rb

def read_queuelist
  $read_queuelist ||= Array.new
end

вид

<%= @readlist %> 

Ответы [ 3 ]

0 голосов
/ 30 января 2011

Вы можете создать множество глобальных хэшей с помощью Redis.Это имеет преимущество масштабирования и, при необходимости, является постоянным (посредством резервного копирования).См. http://redis.io/commands#hash и http://redistogo.com/ для бесплатного хостинга Redis.

0 голосов
/ 30 января 2011

Поскольку вы новичок в Rails, я думаю, вы обнаружите, что использование ActiveRecord для сохранения данных вашей модели в базе данных оказывается самым простым решением.

0 голосов
/ 30 января 2011

Если ваше приложение достаточно простое, вы можете создать массив для каждого пользователя, как показано ниже.Но если ваше приложение предназначено для обработки большого количества пользователей и множества книг, вам следует обратить внимание на интеграцию с БД.

class Book
  attrr_accessor :title, :author

  def initialize(t, a)
    @title, @author = t, a
  end
end

class User
  attr_accessor :books

  def initialize
    @books =  Array.new
  end

  def add(b)
    @books << b
  end
end

joe = User.new

joe.add(Book.new("moo", "foo"))

puts "Joe likes #{joe.books.length} books"

UPD: для рельсов, посмотрите has_many и belongs_to ассоциации .

...