首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为ruby中的每个用户创建一个全局数组。

为ruby中的每个用户创建一个全局数组。
EN

Stack Overflow用户
提问于 2011-01-29 21:02:13
回答 3查看 2K关注 0票数 0

我有个问题,我想找出解决这个问题的最简单的方法.

我的应用程序上有多个用户。该应用程序允许用户将书籍添加到读队列列表中(就像用户可以监视的图书列表一样)。

最初,我将读队列列表设置为全局数组。然而,这意味着多个用户将书籍添加到单个全局数组中。如果user1添加了3本书,user2也会看到这3本书。或者,如果user1清除了读队列列表,user1 2的书籍也会被清除。

可能的解决办法:

  1. 也许我可以在数组中创建一个键,将其一部分与用户关联起来,但我认为数组会变得相当大……
  2. 也许可以创建一个db表“队列列表”。但对于这样的事情,似乎有很多事情要做..。
  3. 可能为每个用户创建一个唯一的全局数组。(我喜欢这个,但不知道怎么做)

希望这是明确的,我是相当新的rails,所以任何帮助都是感谢的!

我对解决方案3的尝试:

books_controller.rb

代码语言:javascript
运行
复制
def add_book_to_queue
  user = User.find(params[:id])
  user.read_queuelist.push(params[:book_info])
  @readlist = user.read_queuelist
end

user.rb

代码语言:javascript
运行
复制
def read_queuelist
  $read_queuelist ||= Array.new
end

视图

代码语言:javascript
运行
复制
<%= @readlist %> 
EN

回答 3

Stack Overflow用户

发布于 2011-01-29 21:10:15

如果您的应用程序足够简单,您可以为每个用户创建一个数组,如下所示。但是,如果您的应用程序要处理大量用户和大量书籍,那么您应该关注DB集成。

代码语言:javascript
运行
复制
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: for rails,看看has_manybelongs_to 联想

票数 0
EN

Stack Overflow用户

发布于 2011-01-30 01:40:53

您可以使用Redis创建许多全局散列。它具有缩放和可选择的持久性(通过备份)的优点。请参阅http://redis.io/commands#hashhttp://redistogo.com/免费的Redis主机。

票数 0
EN

Stack Overflow用户

发布于 2011-01-30 19:06:38

由于您是Rails新手,我想您会发现使用ActiveRecord将模型数据持久化到数据库是最简单的解决方案。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4839409

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档