0

私はここでいくつかの検索を行いましたが、私が探しているものに完全に答えるものを見つけることができませんでした. 検索に失敗した場合は、お詫び申し上げます。

次に進みます。私は Rails の初心者であり、必要に応じて水域をテストするためのアプリケーションに取り組んでいます。認証にDeviseを使用していますが、非常に便利です。そうは言っても、データの特定のチェックがどこに行き、どのようにそれを行うかという大きな障害に遭遇しました。

usersgames、およびの3 つのテーブルがあり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で値があるかどうかを確認します。

あなたが提供できる洞察や知恵を前もって感謝します。

4

2 に答える 2

0

What about this way, may be you don't need users_games if game has_many users and user belongs_to game

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

Then on the view checking if @game has a value or not.

于 2012-07-17T06:16:19.037 に答える
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

これを User モデルのメソッドにすることもできます。

class User < AR::Base
  ...
  def owns_game?(game)
    self.games.include?(game)
  end
end

current_user.owns_game?(@game)次に、コントローラー/ビューを呼び出します。

于 2012-07-17T06:27:37.997 に答える