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