Rails 3 Release Kandidat veröffentlicht

Mit ein wenig Verspätung kommt wurde nun endlich der erste Release Kandidat für Rails 3 veröffentlicht. David schreibt, dass sie es sich eigentlich kurz nach der Rails-Konf in Baltimore vorgenommen hatten, aber dann hat man beschlossen ein paar Verbesserungen einzubauen.

In dieses Release sind knapp 850 Commits von 125 Entwicklern eingeflossen!

Der Release Kandidat ist wie gewohnt über gem installierbar:

[bash]
gem install rails –pre
[/bash]

Einige Highlights in dieser Version:

Der Blogeintrag von David dazu: http://weblog.rubyonrails.org/2010/7/26/rails-3-0-release-candidate?utm_source=feedburner&utm_medium=feed&utm_campaign=Feed%3A+RidingRails+%28Riding+Rails%29

Screencast: Controller in Rails 3

In dieser Woche zeigt Ryan in seinem Screencast einige Details zu respond_with und wie eingebettete Flash Nachrichten und permanente Cookies in Rails 3 eingesetzt werden.

 

Download:

Download(20.3 MB, 10:49)
Alternativer Download für iPod & Apple TV(18.5 MB, 10:49)

 

Resourcen:

 

Quellcode:

[ruby]
# config/application.rb
config.filter_parameters += [:password]

# products_controller
redirect_to @product, :notice => "Successfully created product."
redirect_to [:edit, @product]
redirect_to [@category, :edit, @product]

cookies.permanent[:last_product_id] = @product.id

# in class
respond_to :html, :xml

# in action
respond_with(@products)
respond_with(@product, :location => products_url)
respond_with(@product, :responder => MyResponder)
respond_with(@product) do |format|
format.xml { render :text => "I’m XML!" }
end
[/ruby]

Screencast: Diagramme in Rails Applikationen verwenden

Bilder sagen mehr tausend Worte und daher werden oft Diagramme zur Visualisierung von Daten eingesetzt. Ryan zeigt diese Woche wie Highchart für Diagramme und Grafen innerhalb einer Railsapplikation eingesetzt werden kann.

 

Download:

Download(29.1 MB, 16:12)
Alternativer Download für iPod & Apple TV(27.4 MB, 16:12)

 

Resourcen:

 

Quellcode:

[html]
<!– layouts/application.html.erb –>
<%= javascript_include_tag "jquery-1.4.2.min", "rails", "highcharts" %>

<!– orders/index.html.erb –>
<script type="text/javascript" charset="utf-8">
$(function() {
new Highcharts.Chart({
chart: {
renderTo: "orders_chart"
},
title: {
text: "Orders by Day"
},
xAxis: {
type: "datetime"
},
yAxis: {
title: {
text: "Dollars"
}
},
tooltip: {
formatter: function() {
return Highcharts.dateFormat("%B %e, %Y", this.x) + ‚: ‚ +
"$" + Highcharts.numberFormat(this.y, 2);
}
},
series: [
<% { "Download" => Order.download, "Shipping" => Order.shipping }.each do |name, orders| %>
{
name: "<%= name %>",
pointInterval: <%= 1.day * 1000 %>,
pointStart: <%= 3.weeks.ago.to_i * 1000 %>,
data: <%= orders_chart_series(orders, 3.weeks.ago) %>
},
<% end %>
]
});
});
</script>
<div id="orders_chart" style="width:560px; height:300px;"></div>
[/html]

[ruby]
# rails c
Order.group("date(purchased_at)").select("purchased_at, sum(total_price) as total_price").first.total_price.to_f
Order.group("date(purchased_at)").select("purchased_at, sum(total_price) as total_price").first.purchased_at.to_date

# models/order.rb
scope :shipping, where(:shipping => true)
scope :download, where(:shipping => false)

def self.total_on(date)
where("date(purchased_at) = ?", date).sum(:total_price)
end

# orders_helper.rb
def orders_chart_series(orders, start_time)
orders_by_day = orders.where(:purchased_at => start_time.beginning_of_day..Time.zone.now.end_of_day).
group("date(purchased_at)").
select("purchased_at, sum(total_price) as total_price")
(start_time.to_date..Date.today).map do |date|
order = orders_by_day.detect { |order| order.purchased_at.to_date == date }
order && order.total_price.to_f || 0
end.inspect
end
[/ruby]

Screencast: Rails 3 mit Rack

Rack ist die neue Middleware, die in Version 3 einzug in Rails gefunden hat. Mit der Hilfe Rack können Rails-Applikationen neben z.B. Filter, Caches auch um andere Web-Applikationen erweitert bzw. ergänzt werden. Ryan zeigt diese Woche wie Sinatra für Redirects etc. eingesetzt werden kann.

 

Download:

Download(12.1 MB, 8:48)
Alternativer Download für iPod & Apple TV(12 MB, 8:48)

 

Resourcen:

 

Quellcode:

[ruby]
# routes.rb
root :to => "home#index"
root :to => HomeController.action(:index)
root :to => HomeApp

match "/about" => redirect("/aboutus")
match "/aboutus" => "info#about"

resources :products
match "/p/:id" => redirect("/products/%{id}")

match "/processes" => ProcessesApp.action(:index)

# Gemfile
gem "sinatra"

# lib/home_app.rb
class HomeApp < Sinatra::Base
get "/" do
"Hello from Sinatra!"
end
end

# lib/processes_app.rb
class ProcessesApp < ActionController::Metal
include ActionController::Rendering

append_view_path "#{Rails.root}/app/views"

def index
@processes = `ps -axcr -o "pid,pcpu,pmem,time,comm"`
render
end
end
[/ruby]

[html]
<!– app/views/processes_app/index.html.erb –>
<h1>Processes</h1>
<pre><%= @processes %></pre>
[/html]

Screencast: Subdomains in Rails 3

Seit Rails 3 ist es nun möglich Subdomains ohne zusätzliche Plugins zu benutzen bzw. einzusetzen. Ryan zeigt diese Woche wie.

 

Download:

Download(18.8 MB, 13:55)
Alternativer Download für iPod & Apple TV(18.5 MB, 13:55)

 

Resourcen:

 

Quellcode:

[ruby]
# routes.rb
constraints(Subdomain) do
match ‚/‘ => ‚blogs#show‘
end

# lib/subdomain.rb
class Subdomain
def self.matches?(request)
request.subdomain.present? && request.subdomain != "www"
end
end

# app/helpers/url_helper.rb
module UrlHelper
def with_subdomain(subdomain)
subdomain = (subdomain || "")
subdomain += "." unless subdomain.empty?
[subdomain, request.domain, request.port_string].join
end

def url_for(options = nil)
if options.kind_of?(Hash) && options.has_key?(:subdomain)
options[:host] = with_subdomain(options.delete(:subdomain))
end
super
end
end

# application_controller.rb
include UrlHelper

# config/initializers/session_store.rb
# requires Rails 3.0 RC or head
Rails.application.config.session_store :cookie_store, :key => ‚_blogs_session‘, :domain => :all

# change top level domain size
request.domain(2)
request.subdomain(2)
Rails.application.config.session_store :cookie_store, :key => ‚_blogs_session‘, :domain => "example.co.uk"
[/ruby]

[html]
<!– blogs/index.html.erb –>
<%= link_to blog.name, root_url(:subdomain => blog.subdomain) %>

<!– blogs/show.html.erb –>
<%= link_to "All Blogs", root_url(:subdomain => false) %>
[/html]