我是一个尝试构建我的第一个rails应用程序的noob。这是一个“博彩游戏”,用户试图预测足球结果并获得正确结果的积分或正确的“趋势”(胜利,平局,宽松)。Rails:在一个视图中从三个相关模型中收集数据
创建和更新投注工作正常,同时创建游戏并以管理员用户身份插入结果。但我有在显示来自所有用户的所有投注每场比赛中的一种索引页,它应该大致是这样的问题:
| User1 | User2 | User3 ...
Game Result | Bet | Bet | Bet
Team1 : Team2 1:0 | 1:1 | 3:2 | 1:0
Team3 : Team4 1:2 | 1:2 | -:- | 3:0
Team5 : Team6 -:- | 1:2 | -:- | 3:0
...
我的模型结构如下:
class User < ActiveRecord::Base
has_many :bets
class Game < ActiveRecord::Base
has_many :bets
class Bet < ActiveRecord::Base
belongs_to :user, :class_name => 'User', :foreign_key => 'user_id'
belongs_to :game, :class_name => 'Game', :foreign_key => 'game_id'
在上述场景中表示 - : - 并非每个用户都会在每场比赛中下注,并且不是每场比赛都会有结果。
我尝试了数千种方法来获取索引视图的数据,并得到了多个错误(无对象,没有方法等)的问题。目前(不工作)的方式在控制器中得到的一切:
def index
@users = User.all
@games = Game.all
@bets = Bet.all
end
,并在试图重复的游戏,并通过在视图中的用户和赌注每场比赛中的观点,同时检查是否赌注用户和游戏存在,从而导致无法读取乱码有:
<% @games.each do |game| %>
<tr>
<td><%= game.home_team %> - <%= game.away_team %></td>
<td>
<% if game.away_score.nil? %>
-:-
<% else %>
<%= game.home_score %> : <%= game.away_score %>
<% end -%>
</td>
<% @users.each do |user| %>
<% bet = Bet.where(:user_id => user.id, :game_id => game.id) %>
<% if bet.exists? %>
<td><%= bet.home_bet %> : <%= bet.away_bet %></td>
<% else %>
<td>-:-</td>
<% end -%>
<% end -%>
</tr>
<% end -%>
我希望你能提出来完成这个一个更清洁的方式。不幸的是,我读过的几十篇文章都没有解决我的问题。
所以,第一个问题是:从不同的表中检索所需数据的最佳方法是什么?相应的第二个问题:在控制器中构建数据并将其传递给视图还是将它们放在视图中最好?
我正在使用rails 3.1.1和squlite3。 我希望有人能够帮助这个愚蠢的newbee ...
这里
您可以发布一些您尝试在控制器中组装数据的操作吗?除非你的用户集合会非常小,否则你的用户水平走势不会很好。所有的用户都会在所有游戏上下注吗?如果他们有,那么你可以创建一个表格,将每一行分配给一个游戏,并通过你的投注进行迭代并将它们放入单元格中... – 2012-02-08 14:36:57
刚刚编辑:不,并非所有用户都会在每场比赛中下注,似乎造成了主要问题。由于用户将在稍后的社区(约10名成员)中进行组织,我希望横向布局适合,但那不是当前的主要问题。我稍后会发布一些示例,因为我现在没有全部代码。谢谢回答! – marc78 2012-02-08 14:39:44
大家知道,你的情况下不需要'class_name'和'foreign_key'选项。它们是从关联名称('belongs_to:game')自动推断出来的,只有当关联名称与模型名称或键名称不同时,才需要它们。 – 2012-02-08 14:43:52