All threads / Working with Lists from a Database

Ask A Question

Notifications

You’re not receiving notifications from this thread.

Working with Lists from a Database

Brad Morrical asked in Rails

Greetings, I am learing Ruby on Rails as I'm migrating a legacy app from PHP. I'm just a beginner in ROR, and having trouble setting up the simplest of relationships.

In simplest terms, I have a contracts table, which stores an int. That int refers to a list of items in another table.

'contracts' table:

+----------- +-----------------+
| ContractID | PaymentType     |
+------------+-----------------+
| 2          | 1               |
| 7          | 2               |
| 9          | 2               |
+------------+-----------------+ 

'payment_types' table:

+--------------------- +
| ID | PaymentType     |
+----+-----------------+
| 1  | Cash            |
| 2  | Check           |
| 3  | COD             |
+----------------------+ 
# frozen_string_literal: true

# Contract Class
class Contract < ApplicationRecord

  self.primary_key = 'ContractID'

  belongs_to :payment_type

end

# frozen_string_literal: true

# Payment Types List
class PaymentType < ApplicationRecord

  self.primary_key = 'ID'

  has_many :contracts

end

The structure is not following Rails sensible defaults because it's a legacy database. I've tried all types of associations (One to One, One to Many, Many to Many) yet each time the rails console will not save the record and provides the error:

contract = Contract.new
contract.PaymentType = 1
contract.save!

ActiveRecord::RecordInvalid (Validation failed: Payment type must exist)

Please help me. :(

So it turns out I that I got it working quite well. The fix was to ensure I cross-refrencened the contracts and payment_types models with the has_and_belongs_to_many association:

# class payment_type
has_and_belongs_to_many :contracts
# class contract
has_and_belongs_to_many :payment_types

No join table required, thanks and solved.

Join the discussion

Want to stay up-to-date with Ruby on Rails?

Join 37,629+ developers who get early access to new tutorials, screencasts, articles, and more.

    We care about the protection of your data. Read our Privacy Policy.

    logo Created with Sketch.

    Ruby on Rails tutorials, guides, and screencasts for web developers learning Ruby, Rails, Javascript, Turbolinks, Stimulus.js, Vue.js, and more. Icons by Icons8

    © 2020 GoRails, LLC. All rights reserved.