Пользовательская модель Rails имеет множество действий (наблюдатель), но также должна соблюдаться

StackOverflow https://stackoverflow.com/questions/1892035

Вопрос

Я столкнулся с проблемой с существующим ActiveRecord::Observer модель, которая записывает различные Activities из a User сайт.Все работало действительно хорошо, пока я не попытался observe в User класс с тем же Activity модель, которую он использует для observe другие модели.Подумайте об этом:

class Activity < ActiveRecord::Base
    belongs_to :user
    belongs_to :item, :polymorphic => true
end

class ActivityObserver < ActiveRecord::Observer
    observe :billing, :call, :vanity_number
end

class User < ActiveRecord::Base
    has_many :comments
    has_many :activities
end

class Comment < ActiveRecord::Base
    belongs_to :user
    has_many :activities, :as => :item
end

Все вышесказанное сработало нормально.Запрос на User.activities вернул бы строки из Comment Activities.Как только я добавил :user к тому observe метод в ActivityObserver и изменился has_many :activities в User модель для has_many :activities, :as => :item, User.activities возвращал бы только строки, которые были действиями, относящимися к этому User экземпляр и не Любой Comments

Почему это происходит?Что я могу сделать, чтобы все заработало должным образом?

Это было полезно?

Решение

Когда ты изменился

class User < ActiveRecord::Base
  has_many :activities
end

Для

class User < ActiveRecord::Base
  has_many :activities, :as => :item
end

теперь он смотрит на item_id поле в таблице activities, где поле type - Пользователь, для возврата activities, где item_id = users.id.До того, как он смотрел на user_id поле для деятельности.С тех пор как item_id поле и тип поля не могут иметь двух значений, вы сделали так, чтобы действие указывало либо на пользователя, либо на комментарий.Это не может быть и то, и другое.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top