2012-08-09 62 views
2

当我试图通过has_many:through关系添加对象时,我收到了奇怪的行为。Rails追加不添加对象has_many:通过

我的模型:

Class Player < ActiveRecord::Base 
    has_many :player_to_team_histories 
    has_many :team_histories, through: :player_to_team_histories 
end 
Class TeamHistory < ActiveRecord::Base 
    has_many :player_to_team_histories 
    has_many :players, through: :player_to_team_histories 
end 

代码:

>>p = Player.first 
>>p.team_histories.count 
0 
>>p.team_histories.append TeamHistory.create 
>>p.team_histories.count 
0 
>>p.team_histories.push TeamHistory.create 
>>p.team_histories.count 
1 
>>p.team_histories << TeamHistory.create 
>>p.team_histories.count 
2 

为什么append没有新创建TeamHistory添加到team_histories阵列?

我正在使用Ruby 1.9.2。

更新

发布一个问题Github上: https://github.com/rails/rails/issues/7364

+0

不错的问题。我认为这是微不足道的,但我找不到任何附加方法的文档... – davidrac 2012-08-09 19:04:41

回答

1

据我所知,append不是一个ActiveRecord的方法,而是通过传递到底层(临时)数组,表示team_histories。这种方法可用但可能是错误或疏忽,但无法正确保存关联,但与此同时,您应该仅使用push<<来实现此目的。

+0

这是正确的。 – deefour 2012-08-09 19:32:23