我在这里做了一些搜索,但我找不到任何可以解答我正在寻找的东西。如果我在搜索中失败,我会道歉。
接下来,我是Rails的新手,如果你愿意,我正在开发一个测试水域的应用程序。我正在使用Devise进行身份验证,它证明非常有用。也就是说,我遇到了一个很大的障碍,在那里我会对数据进行检查,以及我将如何处理它。
我有三个表:users
,games
和users_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 :(得分: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
。