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

1 時間以上経過した記事の削除をブロックしたい場合:

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

特定のユーザー ロール (「管理者」など) が任意の年齢の記事を削除できるようにすることは、読者に委ねられた課題です。;)

于 2012-06-09T04:12:15.767 に答える