brandonjyuhas
brandonjyuhas

Reputation: 93

Mongoid could not determine the inverse foreign key to set

I'm building a simple ticket system in an application using MongoDB. At one point, I was able to create tickets, but now I am not. The User model is as follows:

class User
  include Mongoid::Document
  include Mongoid::Timestamps::Updated

  has_many :initiated_tickets, :class_name => 'Ticket', :inverse_of => :initiator
  has_many :assigned_tickets,  :class_name => 'Ticket', :inverse_of => :assignee

The Ticket model is as follows:

class Ticket
  include Mongoid::Document
  include Mongoid::Timestamps::Updated

  field :name
  field :initiator_email
  field :assignee_email
  field :comment


  belongs_to :alert
  has_one :initiator,   :class_name => 'User', :inverse_of => :initiated_tickets
  belongs_to :assignee, :class_name => 'User', :inverse_of => :assigned_tickets

When I attempt to create a ticket, I get an error from Mongoid stating:

Mongoid::Errors::InverseNotFound: 
Problem:
  When adding a(n) User to Ticket#initiator, Mongoid could not determine the inverse foreign key to set. The attempted key was 'initiated_tickets_id'.

I'm not sure what's going wrong here. It looks like the inverse_of is set up correctly for both. Any idea why this isn't working, when it previously was? Thanks!

Upvotes: 3

Views: 1059

Answers (1)

Mike S
Mike S

Reputation: 11409

You only need inverse_of defined on the belongs_to side. Whereas, the has_many side should have the foreign_key defined. I have the exact same relation working as follows:

class User
    has_many :initiated_tickets, foreign_key: "initiator_id", class_name: "Ticket"
    has_many :assigned_tickets, foreign_key: "assignee_id", class_name: "Ticket"

class Ticket
    field :initiator_id, :type => String
    field :assignee_id, :type => String
    belongs_to :initiator, inverse_of: "initiated_tickets" class_name: "User"
    belongs_to :assignee, inverse_of: "assigned_tickets" class_name: "User"

EDIT

Rewrote my answer because I was mistaken originally.

Upvotes: 3

Related Questions