2010-09-28 163 views
0

在我的任何文章控制器crud操作可以运行(不包括索引)之前,我想确保文章的活动字段是真实的。 我想过在before_filter中这样做,但是在那个时候@article还没有设置好,有什么想法吗?在执行CRUD动作之前检查属性是否为真

感谢

回答

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 

基本上你现在可以在你的节目,编辑(等)的行动和观点,而不是@article调用current_article

+0

您可能想要添加一个'before_filter'来检查current_article的可用性。 – 2010-09-28 17:20:55

+0

如果找不到文章,我更新了我的代码以引发异常。只要该方法被调用至少一次(它是),那么before_filter就不是必需的。 – vise 2010-09-28 17:44:38

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 
+0

谢谢shingara,这是很好的做法/形式? – pingu 2010-09-28 16:09:12