我一直在学习RoR,而且我发现自己想知道如何让用户能够“滚动”#34;一次(基本上 - 一次访问控制器中的动作)。让我解释一下。
人们加入一个池,一个数组由池中的user_ids组成。 "辊"从池中随机选择一个用户ID,然后显示与该user_id关联的用户的名称。
我想确保用户已保存,并且他们无法点击浏览器上的后退箭头并且"滚动"再次。
我已经看到了一些"禁用"通过javascript链接,但我不认为这是我正在寻找的解决方案。我更倾向于拥有原始user_id的更安全的服务器端存储。
实现这一目标的方法是什么?我会发布我的代码。 这是带有show动作和滚动的控制器。
def show
@pool = Pool.find_by_id(params[:id])
@games = Game.where(params[:pool_id])
end
def roll
@pool = Pool.find_by_id(params[:id])
@entrants = []
games = @pool.games
ids = games.each do |game|
@entrants << game.user_id
end
@loserwiner = @entrants.sample
puts @loserwiner
end
以下是我从视图中访问滚动的方法。
<%= link_to "Roll", {:controller => 'pools', :action => "roll"}%>
我假设我可以使用某些条件逻辑来确定是否已访问该操作......但我不知道如何...
感谢帮帮!非常感谢。
答案 0 :(得分:1)
每当有人加入游泳池时,你想要展示一个失败者?其他用户是否也应该看到这个失败者,还是每个玩家?
您可以将信息存储在会话中:
session[@pool.id] = @loserwiner
因此,您只需检查行动开始时session[@pool.id]
是否存在。
或者,如果您想要保留此信息,可以在user
和pool
之间创建一个连接表,其中包含存储失败者的列。然后,很容易检查用户是否已经为此池进行了滚动。
详细信息:
而不是:
@entrants = []
games = @pool.games
ids = games.each do |game|
@entrants << game.user_id
end
你可以写
@entrants = @pool.games.pluck(:user_id)
而不是
<%= link_to "Roll", {:controller => 'pools', :action => "roll"}%>
您可能想要使用指定路线
<%= link_to "Roll", roll_pool_path(pool) %>