#routes.rb
get "/:year(/:month(/:day))(/:genre)" => "archives#index", :constraints => { :year => /\d{4}/, :month => /\d{2}/, :day => /\d{2}/ }
#archives_controller.rb
def index
@articles = Article.all(params[:year, :month, :day, :genre],:order => "created_at DESC")
Je veux être en mesure d'obtenir les articles par année, ou année et mois, ou année et mois et jour, avec genre éventuellement à la fin de l'un de ceux. Est-ce que je peux faire ceci dans une déclaration ou ai-je besoin de blocs? Aussi, je veux être en mesure d'obtenir tous les articles dans un genre spécifique, mais je pense que je dois le faire dans une action séparée? Merci!Comment utiliser les attributs optionnels pour sélectionner des articles?
MISE À JOUR
Je fini par utiliser la gemme metawhere plus une méthode pour construire ma date:
def index
date_builder
@articles = Article.where(:created_at.matches % @date, :genre.matches % @genre).order("created_at DESC")
respond_to do |format|
format.json { render :json => @articles }
format.xml { render :xml => @articles }
format.html
end
end
def date_builder
@date = ""
@date += params[:year] if !(params[:year].nil?)
@date += "-" + params[:month] if !(params[:month].nil?)
@date += "-" + params[:day] if !(params[:day].nil?)
@date += "%"
end
Cela a réduit le nombre d'appels sql à un et tout faire paraître jolie. Merci de votre aide!
J'ai commencé avec quelque chose comme ça, mais ce n'était pas assez DRY – illogikal