我有3种型号:游戏,玩家,卡片。
在游戏模型中,我的功能是:
def cards
@cards ||= Card.all.shuffle
end
当我向玩家发牌时:
player.cards << cards.pop
我正在尝试保存卡片变量,刷新后我可以通过剩余卡片与其他玩家交易。
基本上我试图避免以这种方式计算卡片:
def remain_cards
all_cards = Card.all
table_cards = players.map(&:cards).flatten
all_cards - table_cards
end
有没有办法做到这一点?
这是一个BlackJack游戏,游戏周期:
答案 0 :(得分:0)
你能详细介绍一下发生了什么吗?刷新是什么意思?
更新:在这种情况下,我认为简单的答案是否定的。 “每个请求都被视为一个独立的事件,除了存储在用户会话和任何外部数据库,缓存或文件存储中的内容之外,不会传递任何状态信息。最好是设计应用程序而不考虑这一点而不是期待事情只是因为你已经设定它们而持续存在。“ (来源:What data (if any) persists across web-requests in Ruby on Rails?)。我能想到的唯一允许“卡片”数据在请求中保持不变的另一件事是使用cookie。但是,无论如何,你必须不断更新cookie信息。因此,取决于您的情况可能会更好或不好。
更新:我一直在想......持有“卡片组”的一种可能方法是尝试以下内容:
#config/initializers/card.rb - store an instance to an app-wide Card object using an initializer.
THE_CARD_DECK = Card.new
#Now we change the before filter which sets the @cards variable to use that constant:
class ApplicationController < ActionController::Base
before_filter :init_cards
def init_cards
@cards = THE_CARD_DECK
end
end
现在@cards应该是唯一的牌组,你可以在整个游戏中改变它的价值。