#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")
我希望能够按年、年和月、或年月和日获取文章,并且可以在任何这些的末尾选择流派。我可以在一个语句中执行此操作还是需要 if 块?此外,我希望能够获得特定类型的所有文章,但我认为我需要在单独的操作中做到这一点?谢谢!
更新
我最终使用了 metawhere gem 加上一个方法来构建我的日期:
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 调用的数量减少到一个,并使一切看起来都很漂亮。谢谢你的帮助!