我知道这不是任何belongs_to:通过Rails中的关联,但我怎么能解决它?
User
模型有很多Batches
Batch
模型有很多Forecasts
我想创建一个关联,声明Forecast
属于User
。但是,我了解由于Forecast
已经属于User
,因此无需在used_id
模型中存储Forecast
。
如何通过Forecast
模式在User
和Batch
之间创建此关系?
修改
让我更好地解释一下我的问题。
我有以下模特和协会:
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执行此操作。另一方面,预测不属于用户。我怎么能这样做?
答案 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; :批次
最后一行就是你希望这种关系能够双向发展,就像完全多对多的关系一样。