On Monday, May 8, 2017 at 4:27:57 PM UTC-7, Jeremy Evans wrote: > > Currently, Sequel allows the creation of model subclasses even if the > related database table does not exist. > > Unfortunately, this hides bugs. For example, if you do: > > class Foo < Sequel::Model > end > > and the foos table does not exist, no error is generated until you > actually try to use the Foo model. > > The historical reason for this is to allow set_dataset to work after > defining the model class: > > class Foo < Sequel::Model > set_dataset :my_foo > end > > Also, it allows the (already deprecated) schema plugin to work: > > class Foo < Sequel::Model > plugin :schema > create_table?(:my_foo) do > primary_key :id > String :bar > end > end > > For a long time, it's been recommended to use the following format when > you need to override the table name instead of calling set_dataset after > creating the class: > > class Foo < Sequel::Model(:my_foo) > end > > And if you need to modify the schema, it has been recommended for a long > time to do it before defining the model: > > DB.create_table?(:my_foo) do > primary_key :id > String :bar > end > > class Foo < Sequel::Model(:my_foo) > end > > This ensures that when the class is created, the appropriate table exists > and the table is actually usable. > > Sequel has supported requiring a valid table at model class creation time > since 4.33.0, via: > > Sequel::Model.require_valid_table = true > > I am considering requiring a valid table by default in Sequel 5, and > having users do "Sequel::Model.require_valid_table = false" if they want > the current behavior. I would like some feedback from the community before > making a final decision. > > Thanks, > Jeremy > > P.S. Note that this does not affect anonymous class creation (for abstract > model base classes): > > BaseClass = Class.new(Sequel::Model) > > as Sequel doesn't not attempt to assign a dataset to the class in that > case. >
I didn't get a lot of feedback on this, but I think it will make it simpler to catch bugs, so I committed it: https://github.com/jeremyevans/sequel/commit/e660d122818f93a6a5d9fb59efa69cd91a3e628d 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 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.
