Railsers: Please blame SQLite3, not my feeb capacity to read the Agile book, and all the blogs. I want to do many-to-many between two tables. Classic relational stuff, right? So my schema looks a little bit like this: create_table "users_props", :force => true do |t| t.column "prop_id", :integer t.column "user_id", :integer end That links out to users and props tables, right? So their models contain the sacred habtm incantations: class User < ActiveRecord::Base has_and_belongs_to_many :props ... class Prop < ActiveRecord::Base has_and_belongs_to_many :users ... All too obvious to post, right? And all straight out of the Daves'' Agile book, right? Now let''s put them in motion: user.props << prop That produces a huge error message like this: ActiveRecord::StatementInvalid: ActiveRecord::StatementInvalid /usr/lib/ruby/gems/1.8/gems/activerecord-1.14.4/lib/active_record/connection_adapters/sqlite_adapter.rb:259:in `table_structure'' /usr/lib/ruby/gems/1.8/gems/activesupport-1.3.1/lib/active_support/core_ext/object/misc.rb:23:in `returning'' I know how to fix that. I replace the syntactic sugar with this old-skool SQL: Prop.find_by_sql(""" insert into users_props(user_id, prop_id) values(#{user.id}, #{prop.id}) """) Okay. The record is probably there (I honestly didn''t check.) Now I try to read it out: assert_equal 1, quentin.props.count Now check what _that_ gives: ActiveRecord::StatementInvalid: SQLite3::SQLException: no such table: props_users: SELECT count(*) AS count_all FROM props INNER JOIN props_users ON props.id = props_users.prop_id WHERE (props_users.user_id = 1 ) Why is it asking for props_users when I have a users_props? -- Phlip http://c2.com/cgi/wiki?ZeekLand <-- NOT a blog!! --~--~---------~--~----~------------~-------~--~----~ 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 -~----------~----~----~----~------~----~------~--~---
You need to rename your users_props table to props_users; Rails expects the table names to be joined in alphabetical order, and "props" comes before "users" alphabetically. Regards Dave M. On 24/11/06, Phlip <phlip2005-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> wrote:> > Railsers: > > Please blame SQLite3, not my feeb capacity to read the Agile book, and > all the blogs. > > I want to do many-to-many between two tables. Classic relational stuff, right? > > So my schema looks a little bit like this: > > create_table "users_props", :force => true do |t| > t.column "prop_id", :integer > t.column "user_id", :integer > end > > That links out to users and props tables, right? So their models > contain the sacred habtm incantations: > > class User < ActiveRecord::Base > has_and_belongs_to_many :props > ... > > class Prop < ActiveRecord::Base > has_and_belongs_to_many :users > ... > > All too obvious to post, right? And all straight out of the Daves'' > Agile book, right? > > Now let''s put them in motion: > > user.props << prop > > That produces a huge error message like this: > > ActiveRecord::StatementInvalid: ActiveRecord::StatementInvalid > /usr/lib/ruby/gems/1.8/gems/activerecord-1.14.4/lib/active_record/connection_adapters/sqlite_adapter.rb:259:in > `table_structure'' > /usr/lib/ruby/gems/1.8/gems/activesupport-1.3.1/lib/active_support/core_ext/object/misc.rb:23:in > `returning'' > > I know how to fix that. I replace the syntactic sugar with this old-skool SQL: > > Prop.find_by_sql(""" > insert into users_props(user_id, prop_id) > values(#{user.id}, #{prop.id}) > """) > > Okay. The record is probably there (I honestly didn''t check.) Now I > try to read it out: > > assert_equal 1, quentin.props.count > > Now check what _that_ gives: > > ActiveRecord::StatementInvalid: SQLite3::SQLException: no such table: > props_users: SELECT count(*) AS count_all FROM props INNER JOIN > props_users ON props.id = props_users.prop_id WHERE > (props_users.user_id = 1 ) > > Why is it asking for props_users when I have a users_props? > > -- > Phlip > http://c2.com/cgi/wiki?ZeekLand <-- NOT a blog!! > > > >--~--~---------~--~----~------------~-------~--~----~ 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 -~----------~----~----~----~------~----~------~--~---
On Nov 24, 2006, at 11:59 , Phlip wrote:> Why is it asking for props_users when I have a users_props?I believe ActiveRecord by default assumes join tables to be named with the joined table names in alphabetical order. Michael Glaesemann grzm seespotcode net --~--~---------~--~----~------------~-------~--~----~ 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 -~----------~----~----~----~------~----~------~--~---
David Mitchell wrote:> You need to rename your users_props table to props_users; Rails > expects the table names to be joined in alphabetical order, and > "props" comes before "users" alphabetically.Thaaanks. And, yep, the Agile book says that. They shouldn''t have put it above the paragraphs where anyone with >5 years experience coding Ruby would have started skimming!!! -- Phlip http://www.greencheese.us/ZeekLand <-- NOT a blog!!! --~--~---------~--~----~------------~-------~--~----~ 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 -~----------~----~----~----~------~----~------~--~---
David Mitchell wrote:> You need to rename your users_props table to props_users; Rails > expects the table names to be joined in alphabetical order, and > "props" comes before "users" alphabetically.Oooh, one more wisecrack: Well, I''m off to edit my schema.rb file, right below where it says not to edit it! -- Phlip http://www.greencheese.us/ZeekLand <-- NOT a blog!!! --~--~---------~--~----~------------~-------~--~----~ 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 -~----------~----~----~----~------~----~------~--~---
Yep - I fell into this same trap the first time I tried writing a Rails app, and it took someone else to point it out to me... Now it''s your turn to carry on the tradition! Regards Dave M. On 24/11/06, Phlip <phlip2005-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> wrote:> > David Mitchell wrote: > > > You need to rename your users_props table to props_users; Rails > > expects the table names to be joined in alphabetical order, and > > "props" comes before "users" alphabetically. > > Thaaanks. > > And, yep, the Agile book says that. > > They shouldn''t have put it above the paragraphs where anyone with >5 years > experience coding Ruby would have started skimming!!! > > -- > Phlip > http://www.greencheese.us/ZeekLand <-- NOT a blog!!! > > > > >--~--~---------~--~----~------------~-------~--~----~ 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 -~----------~----~----~----~------~----~------~--~---
> And, yep, the Agile book says that. > > They shouldn''t have put it above the paragraphs where anyone with >5 years > experience coding Ruby would have started skimming!!!It''s an excellent book, the only problem I had with it was that I had development experience and wanted to get straight into applying it. After stumbling through it once I then realised that reading it cover to cover before playing made much more sense as there is plenty of solid content later in the book (especially in the testing chapters) that cement things that looked like voodoo earlier. Just my thoughts, Glenn --~--~---------~--~----~------------~-------~--~----~ 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 -~----------~----~----~----~------~----~------~--~---
glenn wrote:> It''s an excellent book, the only problem I had with it was that I had > development experience and wanted to get straight into applying it. > After stumbling through it once I then realised that reading it cover > to cover before playing made much more sense as there is plenty of > solid content later in the book (especially in the testing chapters) > that cement things that looked like voodoo earlier.Hoo-yah. I take it with me whenever I have to go somewhere that''s computer-hostile. Just avoid the pages I have already read too much! -- Phlip http://www.greencheese.us/ZeekLand <-- NOT a blog!!! --~--~---------~--~----~------------~-------~--~----~ 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 -~----------~----~----~----~------~----~------~--~---
One other thing, you should add :id => false to create_table: create_table "users_props", :force => true, :id => false do |t| t.column "prop_id", :integer t.column "user_id", :integer end HABTM join tables should not have an ID column. V/r On 11/25/06, Phlip <phlip2005-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> wrote:> > glenn wrote: > > > It''s an excellent book, the only problem I had with it was that I had > > development experience and wanted to get straight into applying it. > > After stumbling through it once I then realised that reading it cover > > to cover before playing made much more sense as there is plenty of > > solid content later in the book (especially in the testing chapters) > > that cement things that looked like voodoo earlier. > > Hoo-yah. I take it with me whenever I have to go somewhere that''s > computer-hostile. Just avoid the pages I have already read too much! > > -- > Phlip > http://www.greencheese.us/ZeekLand <-- NOT a blog!!! > > > > >-- Email: anthonyeden-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org Cell: 808 782-5046 Current Location: Melbourne, FL --~--~---------~--~----~------------~-------~--~----~ 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 -~----------~----~----~----~------~----~------~--~---