Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fails with wrong number of arguments when used inside a subclass in Ruby 2.6+ #84

Open
dmeranda opened this issue Mar 4, 2020 · 0 comments

Comments

@dmeranda
Copy link

dmeranda commented Mar 4, 2020

If using default_value_for within a subclass of another model, then the class instance initialization will fail with: ArgumentError (wrong number of arguments (given 2, expected 0..1))

This is version 3.3.0 and using all combinations of Ruby 2.6.5 and 2.7, and with Rails 5.2 and 6.0.

For example consider the classes:

class ApplicationRecord < ActiveRecord::Base
  self.abstract_class = true
end

class Example < ApplicationRecord
  default_value_for :name, "Hello"
end

Then calling Example.new will abort with the error. If on the other hand that were to subclass directly from ActiveRecord::Base instead of ApplicationRecord then it works fine.

I think I've tracked it down to calling super() within the initialize method. If I replace
the code in default_value_for.rb

  module InstanceMethods
    def initialize(attributes = nil, options = {})
      ...
      if self.class.respond_to? :protected_attributes
        super(attributes, options)

with

  module InstanceMethods
    def initialize(attributes = nil, options = {})
      ..
      if self.class.respond_to? :protected_attributes
        super(attributes.merge(options))   # <<<< CHANGE THIS LINE

then it seems to work fine. Though I am not comfortable that this is the correct change to make.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant