0

Я пытаюсь создать API ROR, чтобы пользователи могли обновлять определенный продукт (содержит атрибуты заголовка и категорий), этот продукт имеет много- многие ассоциации с категорией объекта следующим образом:Использование атрибута ROR touch с собственностью own_to не работает, когда он используется в таблице соединений

class Product < ApplicationRecord 
    validates :headline, presence: true 
    has_many :product_categories, dependent: :destroy 
    has_many :categories, through: :product_categories 

class Category < ApplicationRecord 
    validates :name, presence: true 
    has_many :product_categories, dependent: :destroy 
    has_many :products, through: :product_categories 
    accepts_nested_attributes_for :product_categories 

class ProductCategory < ApplicationRecord 
    belongs_to :category 
    belongs_to :product, touch: true 

Я хочу изменить поле updated_at в модели продукта всякий раз, когда любое изменение произошло в это атрибут или даже какой-либо из его ассоциации (я использовал атрибут сенсорную в belong_to в ассоциация ProductCategory), но всякий раз, когда я пытался обновить атрибут категории в объекте продукта, категории обновляются в модели ProductCategory, но поле updated_at в модели продукта не изменяется на текущее время, и метод обратного вызова after_touch не вызывается.

Чтобы исправить это, я добавил self.touch в after_save метод:

after_save do 
    self.touch if !self.changed? && self.categories_changed? 
end 

ли сенсорный атрибут работы в соединительной таблице (если это многие-ко-многим) отношение?

ответ

0

Вы не можете использовать опцию касания во многих отношениях, как указано в this question. Как и вы, вам нужно обновить вручную.

BTW, если ProductCategory - это не что иное, как объединение двух таблиц, я полагаю, вы можете использовать отношение «has_and_belongs_to_many» в двух таблицах.

+0

Спасибо за ваш ответ, на самом деле это всего лишь фрагмент моего кода. Модель ProductCategory имеет другой код. –

+0

Я вижу, что вы используете has_many. И если ваш вопрос будет решен, можете ли вы принять мой ответ? – YTorii