2012-07-17 127 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)在您的控制器/視圖中。

相關問題