Skip to content
  • Ryuta Kamizono's avatar
    20da6c7e
    Raise `ArgumentError` for invalid `:limit` and `:precision` like as other options · 20da6c7e
    Ryuta Kamizono authored
    When I've added new `:size` option in #35071, I've found that invalid
    `:limit` and `:precision` raises `ActiveRecordError` unlike other
    invalid options.
    
    I think that is hard to distinguish argument errors and statement
    invalid errors since the `StatementInvalid` is a subclass of the
    `ActiveRecordError`.
    
    https://github.com/rails/rails/blob/c9e4c848eeeb8999b778fa1ae52185ca5537fffe/activerecord/lib/active_record/errors.rb#L103
    
    ```ruby
    begin
      # execute any migration
    rescue ActiveRecord::StatementInvalid
      # statement invalid
    rescue ActiveRecord::ActiveRecordError, ArgumentError
      # `ActiveRecordError` except `StatementInvalid` is maybe an argument error
    end
    ```
    
    I'd say this is the inconsistency worth fixing.
    
    Before:
    
    ```ruby
    add_column :items, :attr1, :binary,   size: 10      # => ArgumentError
    add_column :items, :attr2, :decimal,  scale: 10     # => ArgumentError
    add_column :items, :attr3, :integer,  limit: 10     # => ActiveRecordError
    add_column :items, :attr4, :datetime, precision: 10 # => ActiveRecordError
    ```
    
    After:
    
    ```ruby
    add_column :items, :attr1, :binary,   size: 10      # => ArgumentError
    add_column :items, :attr2, :decimal,  scale: 10     # => ArgumentError
    add_column :items, :attr3, :integer,  limit: 10     # => ArgumentError
    add_column :items, :attr4, :datetime, precision: 10 # => ArgumentError
    ```
    20da6c7e
    Raise `ArgumentError` for invalid `:limit` and `:precision` like as other options
    Ryuta Kamizono authored
    When I've added new `:size` option in #35071, I've found that invalid
    `:limit` and `:precision` raises `ActiveRecordError` unlike other
    invalid options.
    
    I think that is hard to distinguish argument errors and statement
    invalid errors since the `StatementInvalid` is a subclass of the
    `ActiveRecordError`.
    
    https://github.com/rails/rails/blob/c9e4c848eeeb8999b778fa1ae52185ca5537fffe/activerecord/lib/active_record/errors.rb#L103
    
    ```ruby
    begin
      # execute any migration
    rescue ActiveRecord::StatementInvalid
      # statement invalid
    rescue ActiveRecord::ActiveRecordError, ArgumentError
      # `ActiveRecordError` except `StatementInvalid` is maybe an argument error
    end
    ```
    
    I'd say this is the inconsistency worth fixing.
    
    Before:
    
    ```ruby
    add_column :items, :attr1, :binary,   size: 10      # => ArgumentError
    add_column :items, :attr2, :decimal,  scale: 10     # => ArgumentError
    add_column :items, :attr3, :integer,  limit: 10     # => ActiveRecordError
    add_column :items, :attr4, :datetime, precision: 10 # => ActiveRecordError
    ```
    
    After:
    
    ```ruby
    add_column :items, :attr1, :binary,   size: 10      # => ArgumentError
    add_column :items, :attr2, :decimal,  scale: 10     # => ArgumentError
    add_column :items, :attr3, :integer,  limit: 10     # => ArgumentError
    add_column :items, :attr4, :datetime, precision: 10 # => ArgumentError
    ```
Loading