Domanda

Prima di qualsiasi delle mie azioni CRUD del controller articolo può essere eseguito (esclusi indice), voglio fare in modo che il campo attivo del articolo è vero. Ho pensato di fare questo in un before_filter, ma a quel punto @article non è stato impostato, tutte le idee per favore?

Grazie

È stato utile?

Soluzione

È possibile impostare l'articolo in un metodo di supporto e rimuovere alcuni duplicazione del codice, mentre siete a questo.

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

In sostanza è ora possibile chiamare current_article nel vostro show, modificare (ecc) le azioni e le viste invece di @article.

Altri suggerimenti

Hai solo bisogno di fare 2 before_filter.

1 con carico l'articolo e il secondo per verificare se esistono campo

  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
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top