#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")
Я хочу иметь возможность получать статьи по годам, годам и месяцам, годам, месяцам и дням, причем жанр может быть в конце любого из них.Могу ли я сделать это в одном утверждении или мне нужно, если блоки?Также я хочу иметь возможность получить все статьи в определенном жанре, но я думаю, что мне нужно сделать это в отдельном действии?Спасибо!
ОБНОВЛЕНИЕ
В итоге я использовал gem metawhere и метод построения моей даты:
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
Это уменьшило количество вызовов sql до одного и сделаловсе выглядит красиво.Спасибо за вашу помощь!