Доступ к singular_association_ids из модели в Rails - PullRequest
0 голосов
/ 23 января 2011

Я использовал метод association_collection "other_ids" в моем приложении на Rails без проблем. Однако всякий раз, когда я пытаюсь получить доступ к нему из модели, определяющей ассоциацию, Rails не имеет ни малейшего представления, о чем я говорю. Например:

class Membership < ActiveRecord::Base
    belongs_to  :course, :touch => true
    belongs_to  :person, :touch => true
end

class Day < ActiveRecord::Base
    belongs_to  :course,    :touch => true, :counter_cache => true
    has_many    :presents,  :dependent => :delete_all
    has_many    :people,    :through => :presents

    before_destroy  :clear_attendance

    def clear_attendance
        mems = Membership.where(:course_id => course.id, :person_id => person_ids)                                                   
        mems.update_all(["attendance = attendance - ?", (1 / course.days.size.to_f)])
    end
end

В этом случае person_ids всегда равен нулю. Я пробовал self.person_ids, people.ids и т. Д. Все ничего. Я использовал day.person_ids в другом месте без проблем, так почему я не могу использовать его здесь?

Я использую Ruby 1.9.1 и Rails 3.0.3. Вот вызов SQL из моего журнала:

[1m [36mAREL (0.0ms) [0m [1mUPDATE "членство" SET посещаемость = посещаемость - 0.3333333333333333 ГДЕ ("членство". "Course_id" = 4) И ("членство". "Person_id" IN (NULL)) [0м

edit: добавлено больше кода для уточнения вопроса

Ответы [ 2 ]

1 голос
/ 23 января 2011

Что вам действительно нужно, так это:

def a_method
  self.people.all
end

Но, чтобы ответить на ваш вопрос, person_ids - правильный метод, и он должен возвращать пустой массив, а не ноль.Я только что попробовал такую ​​ассоциацию в 2.3.10.Может быть, вы можете опубликовать еще немного своего кода, версию rails и т. Д.

0 голосов
/ 23 января 2011

Спасибо за вашу помощь - я сам понял. Проблема была в порядке моих обратных вызовов. Я пытался вызвать person_ids после того, как связь была удалена. Изменение порядка решило мои проблемы.

class Day < ActiveRecord::Base
   before_destroy  :clear_attendance

   belongs_to  :course,    :touch => true, :counter_cache => true
   has_many    :presents,  :dependent => :delete_all
   has_many    :people,    :through => :presents
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...