On Monday, December 10, 2012 4:17:23 PM UTC-8, Jeremy Botha wrote: > > Good evening all. > > I'm currently in the process of evaluating Sequel as a replacement for AR > in my company's codebase. Our platform is JRuby and we've had some > difficulties related to AR, garbage collection and connection pooling which > I won't go into here. > > I've run into an issue which relates to trying to create Sequel models > mapping an existing legacy MySQL schema, and I'm hoping someone here can > point me in the right direction with examples or a link to relevant > sections in the Sequel docs. I've spent quite a bit of time in the > ActiveRecord and Associations pages but haven't found an answer. > > A simplified version of the schema is as follows: > I have two tables, CONTACTS and CONTACTS_CSTM. CONTACTS_CSTM belongs to > an external application, but some of its data is used throughout our > system. CONTACTS.ID maps one to one onto CONTACTS_CSTM.ID_C > > The Sequel models for this association should be: > > class Contact < Sequel::Model > one_to_one :contacts_cstm > end > > class Contacts_Cstm < Sequel::Model > one_to_one :contacts > end >
As explained in the "Differences Between many_to_one and one_to_one" section in the Association Basics guide (http://sequel.rubyforge.org/rdoc/files/doc/association_basics_rdoc.html), you need to use many_to_one on the side with the foreign key. You may also need to specify the class manually, since you are using Contacts_Cstm instead of ContactsCstm as the model name. You should be using a singular association name for both associations. You probably also need to specify the key manually as well. class Contact < Sequel::Model one_to_one :contact_cstm, :key=>:id_c, :class=>:Contact_Cstm end class Contact_Cstm < Sequel::Model many_to_one :contact, :key=>:id_c end Also, you listed your schema with uppercase names, but Sequel is not going to automatically modify your identifiers on MySQL or SQLite, and it quotes identifiers by default. That means if you get the case of your identifiers wrong, your queries will not work. You can set identifier input/output methods to automatically modify your identifiers if you want. If that doesn't work, please reply. You should probably be testing with an SQL log (DB.loggers << Logger.new($stdout)) so you can see what queries Sequel is issuing to the database. Be sure to include an SQL log in addition to your code and backtrace if you are still having problems. Thanks, Jeremy -- You received this message because you are subscribed to the Google Groups "sequel-talk" group. To view this discussion on the web visit https://groups.google.com/d/msg/sequel-talk/-/ePxxk-b65-IJ. 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/sequel-talk?hl=en.
