I’m hoping someone can help me with a strange glitch I’ve run into…
I've spent a bunch of time narrowing down the issue, and *think* the
problem is with a table which has a foreign key field named “model”.
Unfortunately
it's a legacy database so I can’t just change the field name to fix the
issue.
In my attempts to resolve the issue I have added a column alias of
:model_id pointing to :model, then specified :model_id as the association
key – that initially fixed all my issues, but now I've found instances
where that causes other problems which get fixed if I change the key back
to :model, which then breaks the original queries.
While I'm feeling a bit stumped, I've narrowed the scope down to two
different errors which alternate depending on whether I use :model or
:model_id as the association key.
I have the following tables and relationships defined (extraneous fields
removed for clarity). Note, I have this database and models wrapped in a
module Inventory to keep it separate from another database my application
requires access to, hence the references to "Inventory::Device" and such.
Device (tbl_equipment)
-------------------------------
- id_equipment (key)
- model (foreign key for models)
def_column_alias(:model_id, :model)
many_to_one :device_model, :key=>:model_id, :primary_key=>:id_model, :class
=>'Inventory::Device_Model', :select=>[:id_model, :model_description, :
apple_model_number, :type]
Device_Model (tbl_model)
---------------------------------
- id_model (key)
one_to_many :devices, :key => :model_id, :primary_key => :id_model, :class=>
'Inventory::Device'
*First error: Eager graph not working with :model_id as key*
When I define the association using the :model_id column_alias, and do a
search like:
Inventory::Device.select(:serial_number, :nom_ordinateur).appletvs.
eager_graph(:site, :device_model).order{site[:school_short_name]}.all
I get the following error:
/Library/Ruby/Gems/2.3.0/gems/sequel-5.12.0/lib/sequel/adapters/tinytds.rb:
205:in `fields': TinyTds::Error: Invalid column name 'MODEL_ID'.
(Sequel::DatabaseError)
By playing around I've managed to narrow the issue down to eager_graphing
the :device_model. If I remove that part of the query it works. It also
works fine if I change the association to use :model as the key.
*Second error: Can't express Device as a SQL literal error with :model as
key*
Once I switch the key back to :model, if I query and get a Device object,
but then try to access the device_model accessor, I get an error that the
Device cannot be expressed as a SQL literal, for example, if I query a
device like below:
results = Inventory::Device.where(:serial_number => "serial").eager(:user, :
site, :device_model).first
And then try to access results.device_model I get the error. I get the
same thing if I remove the eager option. If I switch the association key
back to :model_id then this works but the first error kicks in again.
--
You received this message because you are subscribed to the Google Groups
"sequel-talk" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To post to this group, send email to [email protected].
Visit this group at https://groups.google.com/group/sequel-talk.
For more options, visit https://groups.google.com/d/optout.