2013-03-22 113 views
0

我知道這不是belongs_to:通過在Rails中的關聯,但我怎麼能解決它?協會belongs_to:通過

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

我想創建一個協會指出,一個Forecast屬於User。然而,據我所知,由於Forecast已經屬於User,因此不需要將used_id存儲在Forecast模型中。

如何通過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]) 

它已經可以做到這一點與批次。另一方面,預測並不屬於用戶。我怎樣才能做到這一點?

回答

1

There ishas_many :through in Rails。您可以查看the Rails guide以瞭解如何使用它。

+0

確實,但它的作用與我的需求略有不同。在這種情況下,只有一個模型存儲來自該關聯的兩個id。我需要該Forecast具有一個batch_id,並且該批次具有一個user_id。我需要通過批量創建用戶和預測之間的關係。 – 2013-03-22 18:30:55

+0

我改變了標題和問題。其實我是在談論belongs_to。 ;) – 2013-03-22 20:25:53

0

在用戶模式:

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

在您的批量模式:

belongs_to :user 
belongs_to :forecasts 

在您的預測模型:

的has_many:批次 的has_many:用戶:通過=>:批次

最後一行就是如果你想要的關係以雙向的方式運送,就像一個完整的多對多關係。