У меня есть две таблицы, qip_changes и mac_addresses, которые имеют отношение own_to.Когда я пытаюсь получить доступ к таблице mac_address из объекта класса QipChange, я сталкиваюсь с "неопределенным методом` MyDbColumName = 'для nil: NilClass "
, я могу получить свои данные, но я не могу записать в связанныйтаблица:
2.4.1 :044 > i = QipChange.first
QipChange Load (0.5ms) SELECT "qip_changes".* FROM "qip_changes" ORDER BY
"qip_changes"."id" ASC LIMIT $1 [["LIMIT", 1]]
=> #<QipChange id: 2, created_at: "2018-08-21 08:31:48", updated_at:
"2018-08-21 08:31:48", tenant: "BMC-Test", object_type: "Subnet", action:
"add", object_data: "blabalalaalla", implementation_status: "started",
server_response: "", user_id: 1, user_cache: "test">
2.4.1 :045 > i.mac_address
MacAddress Load (0.6ms) SELECT "mac_addresses".* FROM "mac_addresses"
WHERE "mac_addresses"."qip_change_id" = $1 LIMIT $2 [["qip_change_id", 2],
["LIMIT", 1]]
=> nil
2.4.1 :046 > i.mac_address.mac_address = "asocnasc"
NoMethodError: undefined method `mac_address=' for nil:NilClass
from (irb):46
Я полагаю, я просто использую неправильный синтаксис для доступа к связанной таблице, но я не могу найти что-то в Интернете, как это сделать.
мои модели:
class QipChange < ApplicationRecord
belongs_to :user
has_one :mac_address
end
class MacAddress < ApplicationRecord
belongs_to :qip_change
end
от psql:
ipmatedevel=# \d mac_addresses
Table "public.mac_addresses"
Column | Type | Modifiers
---------------+-----------------------------+------------------------------------------------------------
id | bigint | not null default nextval('mac_addresses_id_seq'::regclass)
mac_address | character varying |
created_at | timestamp without time zone | not null
updated_at | timestamp without time zone | not null
qip_change_id | bigint |
Indexes:
"mac_addresses_pkey" PRIMARY KEY, btree (id)
"index_mac_addresses_on_qip_change_id" btree (qip_change_id)
Foreign-key constraints:
"fk_rails_8002186396" FOREIGN KEY (qip_change_id) REFERENCES qip_changes(id)
qipmatedevel=# \d qip_changes
Table "public.qip_changes"
Column | Type | Modifiers
-----------------------+-----------------------------+----------------------------------------------------------
id | bigint | not null default nextval('qip_changes_id_seq'::regclass)
created_at | timestamp without time zone | not null
updated_at | timestamp without time zone | not null
tenant | character varying |
object_type | character varying |
action | character varying |
object_data | character varying |
implementation_status | character varying |
server_response | character varying |
user_id | bigint |
user_cache | character varying | not null
Indexes:
"qip_changes_pkey" PRIMARY KEY, btree (id)
"index_qip_changes_on_user_id" btree (user_id)
Foreign-key constraints:
"fk_rails_3207a22986" FOREIGN KEY (user_id) REFERENCES users(id)
Referenced by:
TABLE "mac_addresses" CONSTRAINT "fk_rails_8002186396" FOREIGN KEY (qip_change_id) REFERENCES qip_changes(id)
edit: так что мне любопытно, если моя ассоциация работает.Так как запрос создается после того, как я ввожу «i.mac_address», кажется, что это работает, я прав?
edit:
i.create_mac_address(mac_address: "aconasic")
, который работал для создания mac_address.Что мне нужно сделать, чтобы получить доступ к нему, начиная с i?
работает после того, как mac_address был создан:
i.mac_address.mac_address