# Debug logger.debug "xx" # Controller stuff class MyController < ApplicationController::Base controller.response.body # Filters before_filter :require_login # Looks for require_login method before_filter MyFilter # Looks for MyFilter class before_filter { |ct| head(400) if ct.params["stop_action"] } around_filter :catch_exceptions after_filter :xx layout "admin_area" # Looks for the view file layout "admin_area", :except => [ :rss, :whatever ] layout :foo # Looks for private function foo private def whatever ... class MyFilter def self.filter(controller, &block) # Model belongs_to :user validates_presence_of :user default_scope :order => 'id DESC' named_scope :today, :conditions = "created_at x" named_scope :today, lambda {{ :conditions = [ "created_at between ? and ?", 1.hour.ago.utc, 300.seconds.ago.utc ] }} # Then you can call feed.today # Controller methods render :action => 'help', :layout => 'help' render :text => 'so and so' render :status => :created, :location => post_url(post) # With HTTP headers redirect_to :action => 'index' render :partial => 'product', :collection => @products, :as => :item, :spacer_template => "product_ruler" return head(:method_not_allowed) head :created, :location => '...' url_for :controller => 'posts', :action => 'recent' location = request.env["SERVER_ADDR"] # For views auto_discovery_link_tag(:rss, {:action => "feed"}, {:title => "RSS Feed"}) javascript_include_tag "foo" stylesheet_link_tag image_tag # Ruby stuff! # Defining a class method (not a typo) Fixnum.instance_eval { def ten; 10; end } Fixnum.ten # => 10 # Defining an instance method Fixnum.class_eval { def number; self; end } 7.number #=> 7 # Multiple arguments, send() class Klass def hello(*args); "Hello " + args.join(' '); end end Klass.new.send :hello, "gentle", "readers" def can(*args) yield if can?(*args) end # can(x) {...} => if can?(x) {...} # Struct class Foo < Struct.new(:name, :email) end j = Foo.new("Jason", "jason@bateman.com") j.name = "Hi" print j.name # Struct class Foo < Struct.new(:name, :email) end j = Foo.new("Jason", "jason@bateman.com") j.name = "Hi" print j.name # Method missing def method_missing(method_name, *arguments) if method_name.to_s[-1,1] == "?" self == method_name.to_s[0..-2] # Rails logger Rails.logger.info("...") # To string :hello_there.to_s