2012-07-17 172 views
0

我在这里做了一些搜索,但我找不到任何能够回答我所需的东西。如果我在搜索中失败,我表示歉意。检查用户是否有游戏

继续前进,我是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值或没有。

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

回答

0

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

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

然后在视图中检查是否有@game值或没有。

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命名约定,要求你在命名你的连接表时遵循字典顺序,即在你的情况下,它将是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 

,然后调用current_user.owns_game?(@game)在您的控制器/视图中。

相关问题