0

如果一个用户有很多文章并且这些文章属于一个用户。然后使用常规脚手架,您希望设置一个时间限制,直到它不能再被删除:

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

您将如何永久禁用用户文章的删除功能?

4

2 回答 2

6

首先,您应该在模型中隐藏此逻辑,并且应该将其作为公共方法提供:

class Article < ActiveRecord::Base
  def destroyable?
    created_at < some_time.ago
  end
  #...
end

然后在您的视图中,您可以执行以下操作:

<% if @model.destroyable? %>
  <!-- delete button/link/... goes here -->
<% end %>

您还需要before_destroy模型中的回调来停止无效破坏false

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

于 2012-06-09T05:06:45.097 回答
1

如果您想阻止超过一小时的文章删除文章:

@article.destroy unless @article.created_at < 1.hour.ago

允许特定用户角色(例如,“管理员”)删除任何年龄的文章是留给读者的练习。;)

于 2012-06-09T04:12:15.767 回答