У меня есть модель урока, который имеет много доработок, как это:Может ли Rails иметь динамические отношения в has_many?
class Lesson < ActiveRecord::Base
has_many :completions, as: :completable
belongs_to :course
end
И каждый Завершение принадлежит пользователю, а также:
class Completion < ActiveRecord::Base
belongs_to :user
belongs_to :completable, polymorphic: true
end
С моей точки зрения приложения Я заинтересован только в количестве, завершений для определенного урока, поэтому я включил счетчик кеша. Что касается индивидуальных завершений, меня интересует только то, что Урок завершен текущим пользователем (я использую Devise).
Есть ли способ создать динамическое отношение has_one какого-то типа, которое использует информацию из current_user для запроса таблицы завершения?
, например:
has_one :completion do
def from_user current_user
Completion.where(completable: self, user: current_user)
end
end
Хотя это может работать, я также имеющий полиморфное отношение. Rails жалуется, что нет внешнего ключа, называемого lesson_id. Когда я добавляю символ foreign_key:
, блок do-end перестает работать.
Любые идеи?
Почему вы не делаете область в Завершение, как 'scope user_complition, -> (урок, пользователь) {где (completeable: lesson, user: user)}' –
И что бы я сделал с этой областью? Могу ли я использовать его как часть has_one? –
нет, но он может выполнить ваше требование, когда вам нужно завершить урок пользователя, просто назовите 'Complition.user_lesson_completion (урок, пользователь) .first' –