在一定时间限制后,不允许用户删除其资源?

时间:2012-06-09 04:00:39

标签: ruby-on-rails ruby ruby-on-rails-3

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

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

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

2 个答案:

答案 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”)删除任何年龄的文章是留给读者的练习。 ;)