在执行CRUD操作之前检查属性是否为真

时间:2010-09-28 15:39:41

标签: ruby-on-rails controller crud before-filter

在我的任何文章控制器crud操作可以运行(不包括索引)之前,我想确保文章的活动字段为true。 我考虑过在before_filter中做这个,但是那时@article还没有设置,有什么想法吗?

由于

2 个答案:

答案 0 :(得分:1)

你只需要做2 before_filter。

1加载文章,第二个检查字段是否存在

  before_filter :load_article, :only => [:show, :edit, :update]
  before_filter :has_field, :only => [:show, :edit, :update]

  ...

  private

  def load_article
    @article = Article.find(params[:id])
  end

  def has_field
    unless @article.active
      redirect_to root_url
    end
  end

答案 1 :(得分:1)

您可以在辅助方法中设置文章,并在您使用时删除一些代码重复。

class .. < ApplicationController

  helper_method :current_article

  def index
    # your code etc..
  end

  private

  def current_article
    @article ||= Article.find(params[:id], :conditions => { :active => true }) || 
                 raise(ActiveRecord::RecordNotFound)
  end

end

基本上,您现在可以在节目中调用current_article,编辑(等)操作和视图,而不是@article