繁体   English   中英

协会属于_通过:

[英]Association belongs_to :through

我知道在Rails中没有归属关系:通过关联,但是我该如何解决呢?

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

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

如何通过Batch模型在ForecastUser之间建立这种关系?

编辑

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

我有以下模型和关联:

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已经可以做到这一点。 另一方面,预测还不属于某个用户。 我怎样才能做到这一点?

还有 has_many :through在轨道上。 您可以查看Rails指南以了解如何使用它。

在您的用户模型中:

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

在您的批次模型中:

belongs_to :user
belongs_to :forecasts

在您的预测模型中:

has_many:batches has_many:users,:through =>:batches

最后一行只是如果您希望这种关系双向发展,就像完整的多对多关系。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM