Verifica un attributo è true prima di eseguire un'azione CRUD
-
26-09-2019 - |
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
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