0

问这个问题感觉有点荒谬,但似乎我仍然无法完全掌握它,以为我有,但似乎需要更多的学习。

好的,所以模型设置如下

class User < ActiveRecord::Base
  attr_accessible :name
  has_many :predictions

end

class Prediciton < ActiveRecord::Base
  attr_accessible :user_id, :score
  belongs_to :user
end

我想做的是从预测模型和用户模型中获取属性以在我的视图中使用。我在一个单独的控制器中执行此操作

def index
  @user = User.find(params[:id])
end

那么在我看来

<% @user.predictions.each do |u| %>
<%= u.name %><!-- this comes from user model -->
<%= u.score %><!-- this comes from prediction model -->
<% end %>

好像休息了几个星期,我忘记了最基本的原则

我当前的错误是找不到没有 ID 的用户

有人可以解释一下我需要在这里做什么......真的很沮丧,我不明白这一点

谢谢

编辑

好的,到目前为止,我认为我已经想出了这个

<% @user.each do |u| %>
 <% u.predictions.each do |h| %>
  <%= u.name %><%= h.score %>

 <% end %>
<% end %>

但我的控制器只是

@user = User.all

我想要的是计算每个用户的所有分数字段的总和

我的控制器会看起来像这样吗

@user = User.all
@scores = @user.predictions.where("fixture_date <= ?", Date.today).sum(:score)
4

1 回答 1

1

除非您更改了索引路由,否则您无法从中获取任何 ID。

如果您希望每个用户都有自己的预测索引,那么您可以嵌套您的路线:

resources :users do
  resources :predictions
end

然后您将拥有诸如 users/34/predictions 之类的路线

此外,一旦您对用户调用预测,您就在使用预测模型,而不是用户:

<% @user.predictions.each do |prediction| %>
  <%= prediction.user.name %>
  <%= prediction.score %>
<% end %>

更新

好吧,你现在问的是一个完全不同的问题,也是一个棘手的问题。

首先,您不能在集合上调用关联,@users = User.all(注意我将变量命名为复数)返回所有用户(因此是集合)。

# this works:
@user = User.first
@scores = @user.predictions.where("fixture_date <= ?", Date.today).sum(:score)

# this doesn't:
@users = User.all
@scores = @users.predictions

您可以执行以下操作,但这会导致很多不好的数据库查询:

def index
  @users = User.all
end

<% @users.each do |user| %>
 <%= user.predictions.where("fixture_date <= ?", Date.today).sum(:score) %>
<% end %>

另一方面,您可以includes在控制器中使用用户,该控制器将仅运行 2 个数据库查询(一次用于用户,一次用于所有预测):

@users = User.includes(:predictions)

但是仅检索某些预测并将它们求和要复杂一些。我建议您开始一个新问题,专门询问这个问题。

于 2013-05-23T07:58:29.187 回答