# The respond_to method will use the HTTP Accept header or any extension in the URL.
# So if the URL is /people/1.xml you will get XML back.
# GET /posts/1
# GET /posts/1.xml
def show
@post = Post.find(params[:id])
respond_to do |format|
format.html # show.html.erb
format.xml { render :xml => @post }
end
end
xml.instruct!
xml.rss "version" => "2.0", "xmlns:dc" => "http://purl.org/dc/elements/1.1/" do
xml.channel do
xml.title "Recent comments for #{@user.login}"
xml.link @rss_url
xml.pubDate CGI.rfc1123_date(@comments.first ? @comments.first.updated_at : Time.now)
xml.description ""
@comments.each do |comment|
xml.item do
xml.title "Comment by #{comment.creation_user.login} #{time_ago_in_words comment.created_at} ago"
xml.link @server_url + comment_url(comment)
xml.description h(comment.body)
xml.pubDate CGI.rfc1123_date(comment.updated_at)
xml.guid @server_url + comment_url(comment)
xml.author h(comment.creation_user.login)
end
end
end
end
# app/views/posts/index.atom.builder:
atom_feed do |feed|
feed.title("My great blog!")
feed.updated((@posts.first.created_at))
for post in @posts
feed.entry(post) do |entry|
entry.title(post.title)
entry.content(post.body, :type => 'html')
entry.author do |author|
author.name("DHH")
end
end
end
end
# Evaluate Ruby code and print the last evaluated value to the page. <%= ruby code here %> # Evaluates Ruby code without outputting anything to the page <% ruby code here %> # Use a minus sign to avoid printing a newline to the page <%= ... %-> <% ... %-> # HTML quoting/escaping with the h() helper method <%=h comment.header %>
# Inside a controller action render :partial => 'name_of_partial' # In an .html.erb template <%= render :partial => 'name_of_partial' %>
# Controller instance variables are available
<%=h @article.name @%
# You can pass any objects into local variables in the partial:
# render :partial => 'article', :locals => { :article => @article, :options => @options }
<%=h article.name %>
# The :object argument initializes local variable with same name as partial.
# render :partial => 'article', :object => @an_article
<%= article.name %
<% for article in @articles %> <%= render :partial => 'article', :object => article %> <% end %> # Can be written more concisely with the :collection argument: <%= render :partial => 'article', :collection => @articles %>
# 1. Layout specified when you invoke render render 'some_template', :layout => 'my_special_layout' render 'some_template', :layout => false # no layout # 2. Layout specified for the controller layout 'standard', :except => [:rss, :atom] layout nil # turns off layouts # 3. Rails looks for a controller layout at: app/views/layouts/controller_name.html.erb # 4. Rails looks for an application layout in the file: app/views/layouts/application.html.erb
class BlogController < ActionController::Base
layout :determine_layout
private
def determine_layout
user.admin? ? "admin" : "standard"
end
end
# in posts/_boxed.html.erb
<div class='box'>
<div id='post_header_<%= post.id %>'><%= yield %></div>
</div>
# in posts/show.html.erb
<% render(:layout => 'boxed', :locals => {:post => @post}) do %>
<%= post.title %> published on <%= post.published_at %>
<% end %>
# You can pass data to layouts with instance variables <%=h @page_title %> # You can pass parts of your template with content_for. # In your template: <% content_for(:left_menu) %> ... <% end %> # In your layout: <% yield :left_menu %>
truncate("Once upon a time in a world far far away", 14)
highlight('You searched for: rails', 'rails')
excerpt('This is an example', 'an', 5)
pluralize(2, 'person')
word_wrap('Once upon a time', 4)
textilize(text)
markdown(text)
simple_format(text)
auto_link(text)
strip_links(text)
sanitize(html)
strip_tags(html)
<tr class="<%= cycle("even", "odd") -%>">
url_for({:controller => 'blog'}, :only_path => false)
link_to "Other Site", "http://www.rubyonrails.org/", :confirm => "Sure?"
link_to "Image", { :action => "view" }, :popup => ['new_window','height=300,width=600']
link_to "Delete Image", { :action => "delete", :id => @image.id }, :method => :delete
<% link_to("Image", {:action => "view"}) do %><%= image_tag("/icons/icon.gif") %><% end %>
button_to "New", :action => "new"
link_to_unless_current("Home", { :action => "index" })
mail_to "me@domain.com", "My email", :encode => "javascript"
# => <script type="text/javascript">eval(unescape('%64%6f%63...%6d%65%6e'))</script>
mail_to "me@domain.com", "My email", :encode => "hex"
# => <a href="mailto:%6d%65@%64%6f%6d%61%69%6e.%63%6f%6d">My email</a>
# In app/views/layouts/application.html.erb
<html>
<head>
# Includes all stylesheets and javascripts and merges them into
# a single file in production for better performance
<%= stylesheet_link_tag :all, :cache => true %>
<%= javascript_link_tag :all, :cache => true %>
</head>
...
<div id='content'>
<div class='left column'>
<h2>Welcome to our site!</h2>
<p>
<%= print_information %>
</p>
</div>
<div class="right column">
<%= render :partial => "sidebar" %>
</div>
</div>
|
=> |
#content
.left.column
%h2 Welcome to our site!
%p= print_information
.right.column= render :partial => "sidebar"
|