Rails ActiveRecord: блокировка конкретной ассоциации, когда запись входит в определенное состояние - PullRequest
0 голосов
/ 25 июля 2010

Другой вопрос задан вопрос об атрибутах, но я хотел бы распространить вопрос на ассоциации.

Скажем, у меня есть простая модель блогов

class Discussion < ActiveRecord::Base
  has_many :comments
end

class Comment < ActiveRecord::Base
  belongs_to :discussion
end

Обсуждение# закрыто?логическое состояние.Я хотел бы заблокировать все точки входа, чтобы добавить больше комментариев к закрытому обсуждению.Например,

discussion.comments << Comment.new
discussion.comments.create(:text => 'Something')

и любые другие, которые могут существовать ...

Спасибо,

-Jason

1 Ответ

0 голосов
/ 25 июля 2010

Попробуйте добавить метод проверки к Comment модели:

class Comment < ActiveRecord::Base
  belongs_to :discussion

  def validate
    errors.add_to_base("Discussion is closed!") if discussion.closed? && new_record?  
  end
end

Эта проверка не позволит добавлять новые комментарии к обсуждению, но позволит редактировать существующие комментарии уже закрытого обсуждения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...