Ruby on rails 创建和销毁HABTM关联-不是实际记录?

Ruby on rails 创建和销毁HABTM关联-不是实际记录?,ruby-on-rails,ruby-on-rails-3,activerecord,Ruby On Rails,Ruby On Rails 3,Activerecord,这与前一个问题类似,但我们的方法自那以后有了一些变化 我需要能够销毁发行版和曲目+产品和曲目之间的关联,而不必销毁曲目本身。然后,我需要能够将跟踪与任何版本或产品重新关联 我的模型如下: class Release < ActiveRecord::Base has_many :products, :dependent => :destroy has_and_belongs_to_many :tracks end class Product < ActiveR

这与前一个问题类似,但我们的方法自那以后有了一些变化

我需要能够销毁发行版和曲目+产品和曲目之间的关联,而不必销毁曲目本身。然后,我需要能够将跟踪与任何版本或产品重新关联

我的模型如下:

 class Release < ActiveRecord::Base
   has_many :products, :dependent => :destroy
   has_and_belongs_to_many :tracks
 end

 class Product < ActiveRecord::Base
   belongs_to :release
   has_many :releases_tracks, :through => :release, :source => :tracks      
   has_and_belongs_to_many :tracks
   before_save do
   self.track_ids = self.releases_track_ids
   end        
 end

class Track < ActiveRecord::Base
  has_and_belongs_to_many :releases
  has_and_belongs_to_many :products
end

class ReleaseTracks < ActiveRecord::Base
  belongs_to :release
  belongs_to :track
end

class ProductsTracks < ActiveRecord::Base
  belongs_to :product
  belongs_to :track
end
我尝试过类似的方法,但它给了我一个错误:

 @product = Product.find(params[:product_id])
 @track = @product.products_tracks.find(params[:track_id])
 @track.destroy

谁能给我指出正确的方向吗?正如我所说,我主要需要销毁,但我还需要能够重新创建关联。

has_和_属于_many
(HABTM)是声明两个模型之间多对多关系的一种方式。在封面下,rails使用一个简单的联接表(一个只有两列的表,每个列都是主表主键的外键)。当联接表中存在记录时,关联就存在。我不确定在这种情况下,
destroy
在默认情况下是如何工作的,但它可能会决定删除所有相关记录(不仅仅是关联记录)。您可以通过使用
相关的
has_和_belient_to _many
(HABTM)来控制这一点,这是声明两个模型之间多对多关系的一种方法。在封面下,rails使用一个简单的联接表(一个只有两列的表,每个列都是主表主键的外键)。当联接表中存在记录时,关联就存在。我不确定在这种情况下,
destroy
在默认情况下是如何工作的,但它可能会决定删除所有相关记录(不仅仅是关联记录)。您可以通过使用
依赖项来控制这一点

是的,您是对的,我已经调整了跟踪/产品模型,但现在出现了“未初始化常量产品::ProductsTrack”错误?您是否删除了原始问题中提到的类定义并生成了新的模型类(并运行db迁移)?是的,我已经调整了跟踪/产品模型,但现在出现了“uninitialized constant product::ProductsTrack”错误?您是否删除了原始问题中提到的类定义并生成了新的模型类(并运行db迁移)?
 @product = Product.find(params[:product_id])
 @track = @product.products_tracks.find(params[:track_id])
 @track.destroy