2010-09-28 161 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