Uploaded image for project: 'Mongoid'
  1. Mongoid
  2. MONGOID-3765

`determine_inverse_foreign_key` does not observe customized foreign key

    • Type: Icon: Bug Bug
    • Resolution: Done
    • Priority: Icon: Major - P3 Major - P3
    • 7.0.0
    • Affects Version/s: None
    • Component/s: None
    • Labels:
      None

      For example, in following code, when I set pre_steps, mongoid will update "post_steps_ids" instead of "post".

      class Step
        has_and_belongs_to_many :pre_steps, foreign_key: :pre, class_name: 'Step', inverse_of: :post_steps
        has_and_belongs_to_many :post_steps, foreign_key: :post, class_name: 'Step', inverse_of: :pre_steps
      end
      

      I use following monkey patch as a workaround

      require 'mongoid/relations/metadata'
      
      class Mongoid::Relations::Metadata
        def determine_inverse_foreign_key
          if has_key?(:inverse_of)
            if inverse_class_name? && inverse_of
              inverse_class_name.constantize.relations[inverse_of.to_s].foreign_key
            else
              inverse_of ? "#{inverse_of.to_s.singularize}#{relation.foreign_key_suffix}" : nil
            end
          else
            "#{inverse_class_name.demodulize.underscore}#{relation.foreign_key_suffix}"
          end
        end
      end
      
      

            Assignee:
            emily.stolfo Emily Stolfo
            Reporter:
            doitian doitian
            Votes:
            0 Vote for this issue
            Watchers:
            1 Start watching this issue

              Created:
              Updated:
              Resolved: