I have a single class with a many-to-many relationship to itself.
class Connection
has_and_belongs_to_many :matches,
:class_name => "Connection",
:join_table => "matched_connections",
:foreign_key => "connection_id",
:association_foreign_key => "match_id"
has_and_belongs_to_many :requests,
:class_name => "Connection",
:join_table => "matched_connections",
:foreign_key => "match_id",
:association_foreign_key =>
"connection_id"
end
I want to be able to destroy all the matches without deleting the
dependent connections. Essentially, I want to remove all the entries in
matched_connections that have the correct connection_id. However, if I
run:
con.matches.destroy_all
It deletes the con object as well. I can''t add :dependent to the
habtm,
so I how do I only destroy the rows in matched_connections and still
keep the objects in sync?
--
Posted via http://www.ruby-forum.com/.
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups
"Ruby on Rails: Talk" group.
To post to this group, send email to
rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org
To unsubscribe from this group, send email to
rubyonrails-talk-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org
For more options, visit this group at
http://groups.google.com/group/rubyonrails-talk?hl=en
-~----------~----~----~----~------~----~------~--~---
Use has:_many :through
class MatchedConnection
# This is your Join Table, now as a real Model. The Table also now
should have an primary key "id" column
belongs_to: matching_connection, :class_name =>
"Connection", :foreign_key => "match_id"
belongs_to: requesting_connnection, :class_name =>
"Connection", :foreign_key => "request_id"
end
class Connection
# a Request connection has these associations to its corresponding
matches:
has_many :match_connections, :class_name => "MatchedConnection",
foreign_key => "request_id"
has_many :matches,
:through => :match_connections,
:class_name => "Connection"
:foreign_key => "match_id"
# a Match connection has these associations to its corresponding
requests:
has_many :requested_connections, :class_name =>
"MatchedConnection", :foreign_key => "match_id"
has_many :requests,
:through => :request_connections,
:class_name => "Connection"
:foreign_key => "request_id"
end
Explanation:>From a connection on the Match side to the request side:
->(match_id ) request_connections (request_id) ->
requests>From a connection on the request side to the Match side:
->(request_id ) request_connections (match_id) -> requests
As the join Table now is a real model, you can access the join items:
@Con = Connection.find(1)
@con.match_connections.destroy_all
don''t let the names of the associations i used confuse you, i
don''t
know exactly what your Models should do, so the naming could be a
little inconvinient.
On 12 Jun., 05:21, Dave Dupre
<rails-mailing-l...-ARtvInVfO7ksV2N9l4h3zg@public.gmane.org>
wrote:> I have a single class with a many-to-many relationship to itself.
>
> class Connection
>
> has_and_belongs_to_many :matches,
> :class_name => "Connection",
> :join_table =>
"matched_connections",
> :foreign_key => "connection_id",
> :association_foreign_key =>
"match_id"
>
> has_and_belongs_to_many :requests,
> :class_name => "Connection",
> :join_table =>
"matched_connections",
> :foreign_key => "match_id",
> :association_foreign_key =>
"connection_id"
> end
>
> I want to be able to destroy all the matches without deleting the
> dependent connections. Essentially, I want to remove all the entries in
> matched_connections that have the correct connection_id. However, if I
> run:
>
> con.matches.destroy_all
>
> It deletes the con object as well. I can''t add :dependent to the
habtm,
> so I how do I only destroy the rows in matched_connections and still
> keep the objects in sync?
>
> --
> Posted viahttp://www.ruby-forum.com/.
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups
"Ruby on Rails: Talk" group.
To post to this group, send email to
rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org
To unsubscribe from this group, send email to
rubyonrails-talk-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org
For more options, visit this group at
http://groups.google.com/group/rubyonrails-talk?hl=en
-~----------~----~----~----~------~----~------~--~---
My explanation is a little wrong, no time to correct it atm. Code should be fine though, just check it out. On 12 Jun., 10:52, Thorsten <duple...-gM/Ye1E23mwN+BqQ9rBEUg@public.gmane.org> wrote:> Use has:_many :through > > class MatchedConnection > # This is your Join Table, now as a real Model. The Table also now > should have an primary key "id" column > > belongs_to: matching_connection, :class_name => > "Connection", :foreign_key => "match_id" > belongs_to: requesting_connnection, :class_name => > "Connection", :foreign_key => "request_id" > > end > > class Connection > > # a Request connection has these associations to its corresponding > matches: > has_many :match_connections, :class_name => "MatchedConnection", > foreign_key => "request_id" > has_many :matches, > :through => :match_connections, > :class_name => "Connection" > :foreign_key => "match_id" > > # a Match connection has these associations to its corresponding > requests: > has_many :requested_connections, :class_name => > "MatchedConnection", :foreign_key => "match_id" > has_many :requests, > :through => :request_connections, > :class_name => "Connection" > :foreign_key => "request_id" > end > > Explanation:>From a connection on the Match side to the request side: > > ->(match_id ) request_connections (request_id) -> requests>From a connection on the request side to the Match side: > > ->(request_id ) request_connections (match_id) -> requests > > As the join Table now is a real model, you can access the join items: > @Con = Connection.find(1) > @con.match_connections.destroy_all > > don''t let the names of the associations i used confuse you, i don''t > know exactly what your Models should do, so the naming could be a > little inconvinient. > > On 12 Jun., 05:21, Dave Dupre <rails-mailing-l...-ARtvInVfO7ksV2N9l4h3zg@public.gmane.org> > wrote: > > > > > I have a single class with a many-to-many relationship to itself. > > > class Connection > > > has_and_belongs_to_many :matches, > > :class_name => "Connection", > > :join_table => "matched_connections", > > :foreign_key => "connection_id", > > :association_foreign_key => "match_id" > > > has_and_belongs_to_many :requests, > > :class_name => "Connection", > > :join_table => "matched_connections", > > :foreign_key => "match_id", > > :association_foreign_key => "connection_id" > > end > > > I want to be able to destroy all the matches without deleting the > > dependent connections. Essentially, I want to remove all the entries in > > matched_connections that have the correct connection_id. However, if I > > run: > > > con.matches.destroy_all > > > It deletes the con object as well. I can''t add :dependent to the habtm, > > so I how do I only destroy the rows in matched_connections and still > > keep the objects in sync? > > > -- > > Posted viahttp://www.ruby-forum.com/.- Zitierten Text ausblenden - > > - Zitierten Text anzeigen ---~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---
Thanks, I was able to make this work elsewhere in my app using the same technique, but I guess habtm always wants to destroy dependencies. I also tried con.matches.delete(all) con.matches.reload That seemed to work as well, but I wasn''t sure of the side effects. -- Posted via http://www.ruby-forum.com/. --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---