Проверка атрибута true перед выполнением действия CRUD - PullRequest
0 голосов
/ 28 сентября 2010

Прежде, чем какое-либо из моих действий контроллера контрола статей может работать (исключая индекс), я хочу убедиться, что активное поле статьи истинно. Я думал об этом в before_filter, но на тот момент @article не был задан, есть идеи, пожалуйста?

Спасибо

Ответы [ 2 ]

1 голос
/ 28 сентября 2010

Вы можете установить статью вспомогательным методом и удалить некоторое дублирование кода, пока вы на нем.

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.

1 голос
/ 28 сентября 2010

Вам просто нужно сделать 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
...