2016-04-20 15 views
0

ジョインテーブルなしのビューの同じテーブルで2つのモデルのデータを使用しようとしています。Rails 4の別のテーブルのアトリビュートに基づくテーブルの参照値

私はGame_idScoreをから表示したいと思います。 3列目には、私はゲームモデルマッチングのName列の値をルックアップするためにgame_idからポイントを使用したいというポイントから同じID。

@points = Point.where(user_id: current_user.id).order(game_id: :desc) 
    @find = @points.pluck(:game_id).last 
    @game = Game.where(id: @find) 

[OK]をので、私は完全なリストを表示するつもりです:このテーブルに適用されますScoreboardController

は、私が最初にPointsのセットを選択して、IDを照会しようとしています@pointsには、game_idのid整数が含まれています。私は@ゲームと一致するゲームを調べるようにします。

次に、3番目の列に@gameの行から.nameを選んでテーブルに表示します。

<tbody> 
     <% @points.each do |point| %> 
     <tr> 
      <td><%= point.game_id %></td> 
      <td><%= point.virtualmoney %></td> 
      <% @game.each do |game| %> 
       <td><%= game.name %> 
      <% end %> 
     <% end %> 
     </tr> 
    </tbody> 

これは正しく、そのゲームのために獲得したvirtualmoneyポイントモデル内のすべてのgame_idsの行を示しています。私はgame.nameで2番目の反復ループを実行しようとします - それはロードしますが、基本的にすべての単一の行の最初の値を返します。

"id:1 | currency:5 | name:"ゲーム1 "... id:2 | currency:3 | name:"ゲーム2 "、それはちょうど"ゲーム1 " 。ゲーム1" など)に

私は、最初の列にgame_idに一致する各行の名前を返すために返すために何をすべき

EDIT:?SCHEMA.RB SNIPPET

create_table "games", force: true do |t| 
    t.string "name" 
    t.integer "max_players" 
    t.datetime "created_at" 
    t.datetime "updated_at" 
    end 

create_table "points", force: true do |t| 
    t.integer "game_id" 
    t.integer "user_id" 
    t.integer "points", default: 0 
    end 
+0

schema.rbを追加できますか? – max

+0

@max良い点を追加しました。 – darkginger

+0

モデルを追加して、関連が適切に行われているかどうかを確認できますか? –

答えて

1

あなたは正しい関連付けを持っている場合は、次のことがあなたの必要性を提供しますが:

<tbody> 
    <% @points.each do |point| %> 
     <tr> 
     <td><%= point.game_id %></td> 
     <td><%= point.virtualmoney %></td> 
     <td><%= point.game.name %></td> 
     </tr> 
    <% end %> 
</tbody> 

事は、ゲームhas_manyポイントで、ポイントbelongs_toゲーム。だから、ポイントオブジェクトから関連するゲーム名をこれによって得ることができます - point.game.name。これはデメテルの法律に違反しますが、必要なことはします。

0

私はあなたが何をしようとしているのか十分に理解していませんが、次の点が役立ちます。次の行は、何もしないされている私が正しく理解していれば:あなたはよく使ったほうが良いかもしれ

<% @game.each do |game| %> 
    <td><%= game.name %> 
<% end %> 

この場合

@find = @points.pluck(:game_id).last 
##Will return only one Game id (e.g. 1) 

@game = Game.where(id: @find) 
## Will return a ActiveRecord Collection with only one game. 

...ので:

@game = Game.find(@find) 

これは等価です電話:

@game = Game.where(id: @find).first 

@gameを反復処理する場合、ActiveRecordコレクションを反復するだけで、1つのアイテムしか含まれません。

追加した基本的な関連付けを含めれば、より理解しやすくなります。

関連する問題