Forum: Ruby on Rails ActiveRecord: FK constraints problem

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
783fed8af50259766b40d2f550ec5974?d=identicon&s=25 zven (Guest)
on 2006-05-28 16:36
(Received via mailing list)
Hi all.

I have has_and_belongs_to_many association between models: Section and
Content.

class Section < ActiveRecord::Base
  acts_as_tree
  has_and_belongs_to_many :contents
  belongs_to :default_content, :class_name => 'Content', :foreign_key =>
'default_content_id', :dependent => :nullify
end

class Content < ActiveRecord::Base
  belongs_to :section
end

When I trying to remove some Content which associated with Section I
have an error related to foreigh key violation:

"PGError: ERROR:  update or delete on "contents" violates foreign key
constraint "fk_contents_contents_sections" on "contents_sections"
DETAIL:  Key (id)=(7) is still referenced from table
"contents_sections".
:             DELETE FROM contents
            WHERE id = 7"

And when I trying to remove Content which belongs to "default_content"
of some Section
I have an error:

PGError: ERROR:  update or delete on "contents" violates foreign key
constraint "fk_sections_contents" on "sections"
DETAIL:  Key (id)=(8) is still referenced from table "sections".
:             DELETE FROM contents
            WHERE id = 8


I simply don't understand why rails can't determine that relation exists
and can't
remove records from join-table transparently...

Please tell me what I must define to got happiness?
I think I should create another model like SectionContent and make
relation like 'has_many :contents, :through => :section_contents'... Is
there another way?

Thanks in advance.


CREATE TABLE sections (
    id serial NOT NULL,
    parent_id integer,
    default_content_id integer
);

CREATE TABLE contents (
    id serial NOT NULL,
    alias character varying(32) NOT NULL,
    name character varying(64) NOT NULL,
    title character varying(64) NOT NULL,
    keywords character varying(256),
    description character varying(512),
    contents character varying(2048),
    last_modified timestamp without time zone
);

CREATE TABLE contents_sections (
    section_id integer NOT NULL,
    content_id integer NOT NULL
);

ALTER TABLE ONLY contents_sections
    ADD CONSTRAINT fk_contents_contents_sections FOREIGN KEY
(content_id) REFERENCES contents(id);

ALTER TABLE ONLY contents_sections
    ADD CONSTRAINT fk_sections_contents_sections FOREIGN KEY
(section_id) REFERENCES sections(id);

ALTER TABLE ONLY sections
    ADD CONSTRAINT fk_sections_contents FOREIGN KEY (default_content_id)
REFERENCES contents(id);
783fed8af50259766b40d2f550ec5974?d=identicon&s=25 zven (Guest)
on 2006-05-28 16:51
(Received via mailing list)
On Sun, 2006-05-28 at 20:35 -0500, zven wrote:

> "PGError: ERROR:  update or delete on "contents" violates foreign key
> constraint "fk_contents_contents_sections" on "contents_sections"
> DETAIL:  Key (id)=(7) is still referenced from table "contents_sections".
> :             DELETE FROM contents
>             WHERE id = 7"
>

"has_and_belongs_to_many :sections" on Content resolves first problem

But the second still confusing me...
This topic is locked and can not be replied to.