ruby rails 3.0.x has_many через исключение только при создании, другие действия работают нормально - PullRequest
1 голос
/ 05 января 2012

Следующая модель отлично работает для чтения, обновления и удаления, но не для создания.

class Space < ActiveRecord::Base
  has_many :space_prices, :dependent => :destroy
  accepts_nested_attributes_for :space_prices, :allow_destroy => true
  has_many :space_price_availabilities, through: :space_prices, :order => "day_of_week, begin_time", read_only: true
end

class SpacePrice < ActiveRecord::Base
  belongs_to :space
  has_many :space_price_availabilities, inverse_of: :space_price, :dependent => :destroy, :order => "day_of_week, begin_time"
  accepts_nested_attributes_for :space_price_availabilities, :allow_destroy => true
end

class SpacePriceAvailability < ActiveRecord::Base
  belongs_to :space_price
end

Я знаю, что обходной путь заключается в реализации метода Space.space_price_availabilities. Недостаточно просто всегда ссылаться на Space.space_prices.space_price_availabilities b / c. Мне нужен полный список, уплощенный и отсортированный.

Если я закомментирую has_many: through в Space, я смогу отлично создать новые Spaces. Затем, если я раскомментирую has_many: through в Space, я смогу прочитать их и обновить их. Только при создании я получаю следующее исключение.

ActiveRecord::HasManyThroughCantAssociateThroughHasOneOrManyReflection

При проверке журналов генерируется и вызывается правильный SQL-запрос, но затем он обращается к этому исключению и откатывает его обратно.

Есть идеи? Я действительно хотел бы знать, если я пропускаю что-то фундаментальное в ассоциациях рельсов. Это выглядит довольно просто для меня. Модель по сути такая же, как пример в документации API.

1 Ответ

3 голосов
/ 06 января 2012

Добавить :autosave => false в

has_many :space_price_availabilities, autosave: false, 
  inverse_of: :space_price, :dependent => :destroy, 
  :order => "day_of_week, begin_time", autosave: false
...