Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- # Rails 3 Chained Scope Example
- def self.matching(column, value)
- where(["#{column} like ?", "%#{value}%"])
- end
- def self.order(col, dir="asc")
- logger.debug("=======hello! col = #{col} and dir = #{dir}")
- sql = case col
- when "id"; "id #{dir}"
- when "created_at"; "created_at #{dir}"
- when "name"; "name #{dir}"
- else "id desc"
- end
- order(sql)
- end
- def self.search(params)
- params.delete_if {|key, value| value.blank? }
- finder = scoped
- if params[:from_id] && params[:to_id]
- finder = finder.where({:id => (params[:from_id]..params[:to_id])})
- elsif params[:from_id]
- finder = finder.where(:id => params[:from_id])
- end
- finder = finder.where(:created_at => " >= #{Time.parse(params[:created_from]).to_s(:db)}") if params[:created_from]
- finder = finder.where(:created_at => " <= #{Time.parse(params[:created_to]).to_s(:db)}") if params[:created_to]
- finder = finder.matching('email', params[:email]) if params[:email].blank
- if params[:keyword].blank
- finder = finder.matching('company', params[:keyword])
- order = nil
- elsif !params[:order_by].blank? && !params[:order_dir].blank?
- order = "#{params[:order_by]} #{params[:order_dir]}"
- end
- return finder.paginate(:per_page => 1, :page => params[:page], :order => order )
- end
Add Comment
Please, Sign In to add comment