Я создаю форумное программное обеспечение. Я хочу реализовать закрытие тема функциональность. Закрытие темы не позволит кому-либо создавать сообщения для закрытой темы.Нужна стратегия «закрыть» тему для форума
Моей текущей реализация
- ТЕМА имеет много сообщений
- Когда ТЕМА создается, по умолчанию, POST также созданное для этой темы. В основном, TOPIC имеет
title
и получает содержимое контента от POSTcontent
.
class AddClosedToTopic < ActiveRecord::Migration
def change
add_column :topics, :closed, :boolean, default: false
end
end
- темы имеет столбец под названием
closed
. Если верноclosed
, тема закрыта. По умолчанию установлено значение false. - Всякий раз, когда пользователь пытается создать сообщение, я использую валидацию ниже, чтобы проверить, закрыта ли тема или нет.
class Post < ActiveRecord::Base
. . .
validate :cannot_create_replies_to_closed_topic
# custom validation methods
def cannot_create_replies_to_closed_topic
topic = Topic.find_by_id(topic_id)
if topic.closed?
errors.add(:content, "can't be created for a topic that is closed")
end
end
end
Проблема
Этот способ отлично работает на тему, которая становится закрыто через некоторое время после его создания. Однако, когда я создаю новую тему, это становится проблематичным.
Поскольку в проверке POST я делаю topic = Topic.find_by_id(topic_id)
, новая тема, которая в настоящее время создается, не будет находиться в базе данных. Поэтому он бросает NoMethodError.
NoMethodError in TopicsController#create
undefined method `closed?' for nil:NilClass
app/models/post.rb:16:in `cannot_create_replies_to_closed_topic'
app/controllers/topics_controller.rb:21:in `create'
Возможное решение?
Я думаю, что у меня есть метод, который может ссылаться на текущую тему, создаваемую каким-то образом в валидации POST, я думаю, что эта проблема может быть решена.
Как я могу это сделать? Или у вас есть другие способы решить эту проблему?
Почему бы вам не сохранить тему после публикации? –