我正在創建一個論壇軟件。我想執行關閉主題功能。關閉主題將阻止任何人爲封閉主題創建帖子。需要一個策略來「關閉」論壇的主題功能
我當前實現
- 主題有很多帖子
- 當創建一個主題,在默認情況下,也是該主題創建的信息。基本上TOPIC有一個
title
,並從POST的content
派生內容主體。
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
問題
這樣工作完全正常的一個主題,就是它的創建後變爲閉合一段時間。但是,當我創建一個新的TOPIC時,它會變得有問題。
由於在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驗證中以某種方式創建的當前主題,我認爲這個問題是可以解決的。
我該怎麼做?或者你們有其他方法來解決這個問題嗎?
爲什麼不在帖子後面保存主題? –