在执行CRUD动作之前检查属性是否为真
问题描述:
在我的任何文章控制器crud操作可以运行(不包括索引)之前,我想确保文章的活动字段是真实的。 我想过在before_filter中这样做,但是在那个时候@article还没有设置好,有什么想法吗?在执行CRUD动作之前检查属性是否为真
感谢
答
你可以设置一个辅助方法的文章,而你在它去除一些重复代码。
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
。
答
您需要做的仅仅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
您可能想要添加一个'before_filter'来检查current_article的可用性。 – 2010-09-28 17:20:55
如果找不到文章,我更新了我的代码以引发异常。只要该方法被调用至少一次(它是),那么before_filter就不是必需的。 – vise 2010-09-28 17:44:38