如果用户有很多文章,这些文章属于用户。然后使用常规脚手架,您需要设置一个时间限制,直到它不再被删除为止:
def destroy
@article = Article.find(params[:id])
@article.destroy
respond_to do |format|
format.html { redirect_to articles_url }
format.json { head :ok }
format.js
end
end
您如何永久禁用用户文章的删除功能?
答案 0 :(得分:6)
首先,您应该在模型中隐藏此逻辑,并且应该将其作为公共方法提供:
class Article < ActiveRecord::Base
def destroyable?
created_at < some_time.ago
end
#...
end
然后在你的观点中你可以做这样的事情:
<% if @model.destroyable? %>
<!-- delete button/link/... goes here -->
<% end %>
您还希望returns false
模型中before_destroy
回调停止无效销毁:
class Article < ActiveRecord::Base
# Your "can destroy" method conveniently returns false at the
# right time so we can use it here too.
before_destroy :destroyable?
#...
end
您还可以向@model.destroyable?
控制器添加明确的destroy
支票,具体取决于您希望如何处理错误。
答案 1 :(得分:1)
如果您想阻止超过一小时的文章删除文章:
@article.destroy unless @article.created_at < 1.hour.ago
允许特定用户角色(例如,“admin”)删除任何年龄的文章是留给读者的练习。 ;)