Rails - Проблем в has_many чрез с вложени атрибути

Имам проблем със запазването на has_many чрез връзка с вложени атрибути. Поради сложността и изискването в приложението връзката е следната

Структура на масата,

agreements:
  id

agreement_rooms:
  id
  agreement_id
  room_id

details:
  id
  agreement_rooms_id

За повече пояснение, таблицата Agreement_rooms е свързана с много други модели, които ще имат Agreement_rooms_id в тях.

асоциации за релси,

class Agreement < ActiveRecord::Base
  has_many :details,:through => :agreement_rooms
  accepts_nested_attributes_for :details
end

class AgreementRoom < ActiveRecord::Base
  has_many :details
end

class Detail < ActiveRecord::Base
  belongs_to :agreement_room
  accepts_nested_attributes_for :agreement_room
end

Когато се опитвам да създам запис на споразумения с хеш подробности в него, получавам следната грешка,

Agreement.last.details.create()

ActiveRecord::HasManyThroughCantAssociateThroughHasOneOrManyReflection: Cannot modify association 'agreement#details' because the source reflection class 'Detail' is associated to 'agreementRoom' via :has_many.

Не съм сигурен как да накарам това вложено приписване да работи с has_many чрез релация за горния пример. Моля, помогнете да разберем проблема.

Благодаря предварително.


person max    schedule 17.12.2015    source източник
comment
Структурата на вашата таблица и асоциациите не съответстват на has-may-through. Предлагам ви да следвате тези Ръководства .   -  person Pavan    schedule 17.12.2015
comment
@pavan, разбирам, че не отговаря на стандартите, но съществуващият дизайн е по пътя, който засега не може да бъде променен. Така че засега просто ми трябва решение, за да накарам това да работи, така че по-късно да може да бъде проектирано според стандартите.   -  person max    schedule 17.12.2015


Отговори (3)


трябва да дефинирате и двете асоциации:

class Agreement < ActiveRecord::Base
  has_and_belongs_to_many :agreement_rooms # or has_many if you prefer
  has_many :details,:through => :agreement_rooms
  accepts_nested_attributes_for :details
end

проверете документите

person Grzegorz    schedule 17.12.2015

Както казах преди, дизайнът на асоциацията на модела, който имаме, не беше правилен и поради лоша поддръжка трябва да бъде по същия начин, поне засега. Така че трябваше да напиша мръсен пач, за да го поправя.

Той просто пропуска вложени атрибути само за този конкретен модел, така че може да бъде записан отделно чрез предаване на идентификатора на главния запис към този запис.

Тъй като е мръсно решение, не го маркирам като отговор. Току-що го добавих с надеждата, че някой може да има решение, ако е необходимо.

Благодаря за помощта

person max    schedule 03.01.2016

person    schedule
comment
Това решение не работи за мен, защото моята асоциация нарушаваше стандартите has_many. Но за правилно has_many чрез асоцииране това решение ще работи. - person max; 03.01.2016