检查用户是否有游戏

时间:2012-07-17 05:47:34

标签: ruby-on-rails devise

我在这里做了一些搜索,但我找不到任何可以解答我正在寻找的东西。如果我在搜索中失败,我会道歉。

接下来,我是Rails的新手,如果你愿意,我正在开发一个测试水域的应用程序。我正在使用Devise进行身份验证,它证明非常有用。也就是说,我遇到了一个很大的障碍,在那里我会对数据进行检查,以及我将如何处理它。

我有三个表:usersgamesusers_games(我读到这是关系表的可接受的命名约定,如果我错了,请纠正我)。在游戏页面上,如果当前登录的用户已将此游戏添加到他们的帐户(users_games),我想显示某条消息。我不确定在哪里进行这项检查,或者甚至根本不重要。

至于实际检查,我最初的想法将是:

games_controller.rb

class GamesController < ApplicationController
  def index
    @games = Game.all
  end

  def show
    @game = Game.find(params[:id])
    @user_owns = UsersGames.where(:game_id => @game.id, :user_id => current_user.id)
  end
end

然后在视图上检查@user_owns是否有值。

提前感谢您提供的任何见解或智慧。

2 个答案:

答案 0 :(得分:0)

这种方式怎么样,可能你不需要users_games 如果游戏has_many用户和用户belongs_to游戏

  def show
    @game = Game.find_by_user_id(current_user.id)
  end

然后在视图上检查@game是否有值。

答案 1 :(得分:0)

如果您的Users<->Games关系是一个简单的HABTM,在连接表上没有其他属性,即

class User < AR::Base
  has_and_belongs_to_many :games

class Game < AR::Base
  has_and_belongs_to_many :users

您不需要为连接表设置单独的模型,前提是您遵循Rails命名约定,该约定要求您在命名连接表时遵循词典顺序,即在您的情况下它将是{{1而不是像你现在这样的其他方式。

回到原来的问题,我认为它可以这么简单:

games_users

您也可以在用户模型上创建一个方法:

def show
  @game = Game.find(params[:id])
  @game_owned = current_user.games.include? @game
end

然后在控制器/视图中调用class User < AR::Base ... def owns_game?(game) self.games.include?(game) end end