协会belongs_to:通过

时间:2013-03-22 18:25:49

标签: ruby-on-rails ruby activerecord associations

我知道这不是任何belongs_to:通过Rails中的关联,但我怎么能解决它?

  • User模型有很多Batches
  • Batch模型有很多Forecasts

我想创建一个关联,声明Forecast属于User。但是,我了解由于Forecast已经属于User,因此无需在used_id模型中存储Forecast

如何通过Forecast模式在UserBatch之间创建此关系?

修改

让我更好地解释一下我的问题。

我有以下模特和协会:

User < ActiveRecord::Base
  has_many :batches
# has_many :forecasts, through: :batches
end

Batch < ActiveRecord::Base
  belongs_to :user
  has_many :forecasts
end

Forecast < ActiveRecord::Base
  belongs_to :batch
# belongs_to :user, through: :batch
end

注释行是我想要做的,但我不能,因为没有belongs_to :through关联。

这种关系严格遵守代码:用户可能有很多批次。批处理是一组预测,因此批处理可能有许多预测。由于批处理必须属于用户,并且预测必须属于批处理,因此预测属于用户。

我想从用户中选择属于所有批次的所有预测。

current_user.forecasts

我想这样做的原因是将用户的范围仅限于其自己的批次和预测。所以在控制器动作上,而不是

Batch.find(params[:id])

Forecast.find(params[:id])

我可以制作

current_user.batches.find(params[:id])

current_user.forecasts.find(params[:id])

已经可以使用Batch执行此操作。另一方面,预测不属于用户。我怎么能这样做?

2 个答案:

答案 0 :(得分:1)

Rails中的 has_many :through。您可以查看the Rails guide以查看如何使用它。

答案 1 :(得分:0)

在您的用户模型中:

has_many :batches
has_many :forecasts, :through => :batches

在您的批次模型中:

belongs_to :user
belongs_to :forecasts

在您的预测模型中:

has_many:批次    has_many:users,:through =&gt; :批次

最后一行就是你希望这种关系能够双向发展,就像完全多对多的关系一样。