Hi Jeremy,

After some testing and fiddling with my code, it in fact works correctly 
with model_map instead of key_map. For whatever reason, my first attempt at 
using model_map failed, but it is somehow working again. Thank you for your 
response!

On Thursday, September 16, 2021 at 3:43:35 PM UTC-7 Jeremy Evans wrote:

> On Thu, Sep 16, 2021 at 10:48 AM 'Andrew Wei' via sequel-talk <
> [email protected]> wrote:
>
>> Hello,
>>
>> I was working my way through implementing the single table inheritance 
>> plugin 
>> <https://sequel.jeremyevans.net/rdoc-plugins/classes/Sequel/Plugins/SingleTableInheritance.html>
>>  and 
>> I think I found a few typos in the documentation.
>>
>> I found that using *key_map:* instead of *model_map:* properly maps the 
>> class to the type column. (I'm not sure how it's supposed to be 
>> implemented, but *model_map:* sounds like it should be the appropriate 
>> option name for this.)
>>
>> Additionally, I found that I had to swap the direction of the map hashes 
>> for the plugin to work correctly. For example, the map should look like 
>> this instead: *{:Staff => 1, :Manager => 2}*
>>
>> Using the example in the docs, I found that the following changes need to 
>> be made to get it working correctly:
>>
>> Doc example:
>>
>> *Employee.plugin :single_table_inheritance, :type, model_map: {1=>:Staff, 
>> 2=>:Manager}*
>>
>> How I got it to work:
>> *Employee.plugin :single_table_inheritance, :type, key_map: {:Staff => 
>> 1, :Manager => 2}*
>>
>> I just wanted to share my findings and confirm that I'm using the plugin 
>> correctly.
>>
>
> model_map is used to map the value of the :type column (the key column) to 
> the appropriate model class name to use.  key_map is used to map the model 
> class name to the appropriate key column value(s).  You want both options.  
> With just key_map and no model_map, you'll probably end up with an error 
> when you retrieve a record:
>
> DB.create_table(:staff) do
>   primary_key :id
>   Integer :type
> end
>
> class Staff < Sequel::Model(:staff)
>   plugin :single_table_inheritance, :type, key_map: {:Staff=>1, 
> :Manager=>2}#, model_map: {1=>:Staff, 2=>:Manager}
> end
>
> class Manager < Staff
> end
>
> Staff.create
> Manager.create
>
> Staff.all
> # Invalid class type used: 1 (Sequel::Error)
>
> Thanks,
> Jeremy
>
>
>
>

-- 
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 view this discussion on the web visit 
https://groups.google.com/d/msgid/sequel-talk/8aedd85c-5ce4-486c-a707-ceca4547b0a6n%40googlegroups.com.

Reply via email to