3
I’m having trouble with an association has_many
, through
on a project I’m working on.
In case I need to model a relation that adds the attribute order to relation table.
To try to model the relationship I looked for a guide in version 3.2 Rails, as we use this version due to some adaptation problems.
I tried to implement to test the association, as in the example, but whenever I try to relate the models it does not insert the relation in the table. My code went like this:
class Medico < ActiveRecord::Base
attr_accessible :nome
has_many :consultas
has_many :pacientes, through: :consultas
end
class Paciente < ActiveRecord::Base
attr_accessible :nome
has_many :consultas
has_many :medicos, through: :consultas
end
And:
class Consulta < ActiveRecord::Base
belongs_to :medico
belongs_to :paciente
attr_accessible :ordem
end
The migrates were also generated automatically and were like this:
class CreateMedicos < ActiveRecord::Migration
def change
create_table :medicos do |t|
t.string :nome
t.timestamps
end
end
end
class CreatePacientes < ActiveRecord::Migration
def change
create_table :pacientes do |t|
t.string :nome
t.timestamps
end
end
end
class CreateConsulta < ActiveRecord::Migration
def change
create_table :consulta do |t|
t.references :medico
t.references :paciente
t.integer :ordem
t.timestamps
end
add_index :consulta, :medico_id
add_index :consulta, :paciente_id
end
end
It turns out that when I’m gonna raise a doctor and raise a patient by associating with a doctor,, he does not give the INSERT
in the table query, for example:
m1 = Medico.create(nome:"Dr. Medico") (0.4ms)
BEGIN
SQL (4.3ms) INSERT INTO "medicos" ("created_at", "nome", "updated_at") VALUES ($1, $2, $3) RETURNING "id" [["created_at", Fri, 07 Dec 2018 17:28:15 -02 -02:00], ["nome", "Dr. Medico"], ["updated_at", Fri, 07 Dec 2018 17:28:15 -02 -02:00]]
(0.6ms) COMMIT
=> #<Medico id: 10, nome: "Dr. Medico", created_at: "2018-12-07 19:28:15", updated_at: "2018-12-07 19:28:15">
P1 = Patient.create(name:"Patient 1", physicians: [M1])
BEGIN
SQL (0.7ms) INSERT INTO "medicos" ("created_at", "nome", "updated_at") VALUES ($1, $2, $3) RETURNING "id" [["created_at", Fri, 07 Dec 2018 17:28:47 -02 -02:00], ["nome", "Dr. Medico"], ["updated_at", Fri, 07 Dec 2018 17:28:47 -02 -02:00]]
(0.5ms) COMMIT
=> #<Medico id: 11, nome: "Dr. Medico", created_at: "2018-12-07 19:28:47", updated_at: "2018-12-07 19:28:47">
Note: This is my first post on the stack, I’m a starter in the development area, so I’m sorry right away if I got confused. :)
Thank you for answering :) I tried to perform the operation, but it keeps giving error, but now a different error. Activerecord::Associationtypemismatch: Query(#47218530709060) expected, got Patient(#47218527660420) from usr/local/Bundle/Gems/activerecord-. 2.22.5/lib/active_record/Associations/Association.Rb:210:in `raise_on_type_mismatch'
– jfranca