On Jueves, 8 de Abril de 2010 13:37:27 anton escribió: > I have one more quick question. Now that I'm using a habtm > relationship, is there a nice way to remove the inverse relationship > on delete. Say I have a Product (p1) and it has an associated product > (p2), when p2 is deleted I'd like the relationship to also be removed > - so from a DB standpoint I want to do something like "DELETE FROM > associated_products WHERE product_id=id OR associated_id=id" instead > of the standard cascade delete on product_id.
Really it's a pure rails issue, but you can try setting :delete_sql option in your association definition. > > Thanks > > On Apr 8, 9:36 am, anton <[email protected]> wrote: > > Great, that's working fine now. Many thanks Sergio. > > > > On Apr 8, 9:24 am, "Sergio Cambra .:: entreCables S.L. ::." > > > > <[email protected]> wrote: > > > On Miércoles, 7 de Abril de 2010 16:59:26 anton escribió: > > > > Hi, > > > > > > > > Hoping someone can help me with this. I have a :has_many :through > > > > self referential association. Creating/Adding/Removing Products and > > > > nested associated products in working fine apart from when you try to > > > > remove the last existing Product of the association. The update isn't > > > > triggered on the association table (I'm presuming because there is no > > > > collection in the updated model to trigger the associated update/ > > > > delete). > > > > > > > > See example below, where a Product can have many AssociatedProducts: > > > > > > > > Tables: > > > > create_table :products do |t| > > > > t.string :title, :null => false > > > > end > > > > > > > > create_table :associated_products do |t| > > > > t.references :product, :null => false > > > > t.integer :associated_id, :null => false > > > > end > > > > > > > > Models: > > > > class Product < ActiveRecord::Base > > > > has_many :associated_products, :dependent => :destroy > > > > has_many :associates, :through => :associated_products > > > > end > > > > > > > > class AssociatedProduct < ActiveRecord::Base > > > > belongs_to :product > > > > belongs_to :associate, :class_name => "Product", :foreign_key > > > > => :associated_id > > > > end > > > > > > It's a bug in has_many through support. Really you don't need has_many > > > through in this case, you can do the same with habtm (which is > > > working): class Product < ActiveRecord::Base > > > has_and_belongs_to_many :associates, :class_name => 'Product', > > > :join_table => :associated_products, :association_foreign_key => > > > :associate_id end > > > > > > Anyway, I have fixed removing last associated record from has_many > > > through > > > > > > > Controllers: > > > > class ProductsController < ApplicationController > > > > active_scaffold :product do |config| > > > > config.columns = [ :title, :associates ] > > > > config.columns[:associates].form_ui = :select > > > > # Same behaviour whether draggable_lists or standard checkboxes > > > > are used > > > > #config.columns[:associates].options = {:draggable_lists => true} > > > > config.columns[:associates].label = "Associated Products" > > > > end > > > > end > > > > > > > > Any help on this greatly appreciated. > > > > > > > > Cheers, > > > > > > > > Anton > > > > > > -- > > > Sergio Cambra .:: entreCables S.L. ::. > > > Mariana Pineda 23, 50.018 Zaragoza > > > T) 902 021 404 F) 976 52 98 07 E) [email protected] -- Sergio Cambra .:: entreCables S.L. ::. Mariana Pineda 23, 50.018 Zaragoza T) 902 021 404 F) 976 52 98 07 E) [email protected] -- You received this message because you are subscribed to the Google Groups "ActiveScaffold : Ruby on Rails plugin" group. To post to this group, send email to [email protected]. To unsubscribe from this group, send email to [email protected]. For more options, visit this group at http://groups.google.com/group/activescaffold?hl=en.
