JAX London mit Ruby-Track

auf unserer diesjährigen Konferenz „JAX London“ findet ein ganzer Track statt, der sich ausschließlich mit Ruby on Rails befasst.
Der Track findet am 22. Februar 2010 in London statt. Der Ruby on Rails Track soll eine umfassende Sicht zur State of the Art der Website-Entwicklung mit RoR bieten!

Es sind Namhafte Speaker vertreten:
Charles Nutter, Creator der JRuby-Implementierung und einer der Masterminds der Rails-Community, sowie Steven Bristol, Rails-Enthusiast und -Experte aus Florida & Michael Johann, Rails-Experte und Chefredakteur des in Deutschland erscheinenden RailsWay Magazins halten verschiedene Vorträge.

Neben dem Schwerpunkt Ruby on Rails sind auch Java, Scala, Groovy/Grails & OSGi Top-Themen der JAX London 2010.

Alle Infos zur Konferenz finden Sie unter www.jaxlondon.com.

Screencast: Mehrere Daten gleichzeitig bearbeiten

Mehrere Einträge in Formular gleichtzeitig zu bearbeiten erfordert gewisse Anpassungen bzw. Vorkehrngen. Eine Möglichkeit wie dies gelöst werden kann zeigt Ryan diese Woche in seinem Screencast.

Download

Download (33.6 MB, 13:53)
Alternativer Download für iPod & Apple TV (19.8 MB, 13:53)

Ressourcen:

Quellcode:

[ruby]
# products_controller.rb
def edit_individual
@products = Product.find(params[:product_ids])
end

def update_individual
@products = Product.update(params[:products].keys, params[:products].values).reject { |p| p.errors.empty? }
if @products.empty?
flash[:notice] = "Products updated"
redirect_to products_url
else
render :action => "edit_individual"
end
end

# routes.rb
map.resources :products, :collection => { :edit_individual => :post, :update_individual => :put }
[/ruby]

[html]
<!– views/products/index.html.erb –>
<% form_tag edit_individual_products_path do %>
<table>
<tr>
<th></th>
<th>Name</th>
<th>Category</th>
<th>Price</th>
</tr>
<% for product in @products %>
<tr>
<td><%= check_box_tag "product_ids[]", product.id %></td>
<td><%=h product.name %></td>
<td><%=h product.category.name %></td>
<td><%= number_to_currency product.price %></td>
<td><%= link_to "Edit", edit_product_path(product) %></td>
<td><%= link_to "Destroy", product, :confirm => ‚Are you sure?‘, :method => :delete %></td>
</tr>
<% end %>
</table>
<p>
<%= select_tag :field, options_for_select([["All Fields", ""], ["Name", "name"], ["Price", "price"], ["Category", "category_id"], ["Discontinued", "discontinued"]]) %>
<%= submit_tag "Edit Checked" %>
</p>
<% end %>

<!– views/products/edit_individual.html.erb –>
<% form_tag update_individual_products_path, :method => :put do %>
<% for product in @products %>
<% fields_for "products[]", product do |f| %>
<h2><%=h product.name %></h2>
<%= render "fields", :f => f %>
<% end %>
<% end %>
<p><%= submit_tag "Submit" %></p>
<% end %>

<!– views/products/_fields.html.erb –>
<%= f.error_messages :object_name => "product" %>
<% if params[:field].blank? || params[:field] == "name" %>
<p>
<%= f.label :name %><br />
<%= f.text_field :name %>
</p>
<% end %>
<% if params[:field].blank? || params[:field] == "price" %>
<p>
<%= f.label :price %><br />
<%= f.text_field :price %>
</p>
<% end %>
<% if params[:field].blank? || params[:field] == "category_id" %>
<p>
<%= f.label :category_id %><br />
<%= f.collection_select :category_id, Category.all, :id, :name %>
</p>
<% end %>
<% if params[:field].blank? || params[:field] == "discontinued" %>
<p>
<%= f.check_box :discontinued %>
<%= f.label :discontinued %>
</p>
<% end %>
[/html]

Artikel zu Rails 3

Rails 3 steht vor der Tür und wird jede Menge Neuerungen mitbringen. Maxim C. hat eine Liste mit Links von interessanten Artikeln und Anleitungen zusammengestellt um sich mit dem kommenden Release anzufreunden. Weitere Vorschläge und Empfehlungen sind willkommen.

Die Liste ist in die verschiedenen Bereiche des Frameworks aufgeteilt und chronologisch sortiert.

Router

ActiveRecord

Controller

Generatoren

Rails 3 Applikationen laufen lassen

Auf Rails 3 aktualisieren

Plugin/Gem Kompatiblität

Architektur

REST und HTTP: Einsatz der Architektur des Web für Integrationsszenarien

Das Buch bietet eine theoretisch fundierte, vor allem aber praxistaugliche Anleitung zum professionellen Einsatz von RESTful HTTP. Es beschreibt den Architekturstil REST (Representational State Transfer) und seine Umsetzung im Rahmen der Protokolle des World Wide Web (HTTP, URIs und andere). Es wird gezeigt, wie man klassische Webanwendungen und Webservices so entwirft, dass sie im Einklang mit den Grundprinzipien des Web stehen und seine vielen Vorteile ausnutzen.

Nach einer kurzen Einleitung, die die Grundprinzipien vermittelt (Ressourcen, Repräsentationen, Hyperlinks, Content Negotiation), wird ein vollständiges praktisches Beispiel vorgestellt. Danach werden die einzelnen Konzepte sowie fortgeschrittene Themen wie Caching, Dokumentation und Sicherheit detailliert betrachtet. Schließlich wird eine erweiterte Form der Beispielanwendung entwickelt, um die Umsetzung der fortgeschrittenen Konzepte zu demonstrieren.

Den Quellcode der Beispiele, Ergänzungen und diverse Online-Ressourcen finden Sie auf der Website zum Buch.

 

Über den Autor

Stefan Tilkov beschäftigt sich seit Beginn der 90er-Jahre mit Architekturansätzen für große, verteilte Systemlandschaften. Von 1993 bis 1998 war er in verschiedenen Rollen bei einem mittelständischen Softwarehaus tätig, zuletzt als Leiter des Bereichs Anwendungsentwicklung, bevor er 1999 die Technologieberatung innoQ Deutschland GmbH mitgründete. Als Geschäftsführer und Principal Consultant beschäftigt er sich dort schwerpunktmäßig mit modellgetriebenen Softwareentwicklungsansätzen und serviceorientierten IT-Architekturen.

 

JQuery 1.4 erschienen

Die beliebte JavaScript Bibliothek JQuery ist in der Version 1.4 erschienen. Die neuen Version bring einige Neuerungen und Erweiterungen mit.
Zudem haben die Entwickler die Geschwindigkeit drastisch verbessert. In manchen Bereichen sogar um das Doppelte oder Dreifache.

Eine Liste der Änderungen kann man auf http://jquery14.com/day-01/jquery-14 nachlesen. Diese Seite ist extra diesem Release gewidmet und enthält viele wertvolle Informationen zu JQuery.

Das aktuelle Paket kann auf den Projektseite (http://jquery.com/) runtergeladen werden. Es werden zwei verschieden Versionen unterscheiden, die sich lediglich in ihrer Größe unterscheiden. Eine „verkleinerete“ Version für den produktiven Einsatz und eine weitere mit gleichen Inhalt, allerdings in einem „lesbaren Zustand“.

Projektseite: http://jquery.com/

Screencast: Formulare mit verschachtelten Modellen Teil 2

In dieser Woche geht es weiter mit dem zweiten Teil von Ryans Screencast zu dem Thema „Formulare mit verschachtelten Modellen“. Er wie weitere Felder dynamisch mit JavaScript, über Prototype oder Query, hinzugefügt werden können.

Download:

Download (15.9 MB, 12:40)
alternative download for iPod & Apple TV (20.2 MB, 12:40)

 

Resourcen:

Quellcode:

[html]
<!– _form.html.erb –>
<p><%= link_to_add_fields "Add Question", f, :questions %></p>

<!– _question_fields.html.erb –>
<%= link_to_remove_fields "remove", f %>

<p><%= link_to_add_fields "Add Answer", f, :answers %></p>

<!– _answer_fields.html.erb –>
<%= link_to_remove_fields "remove", f %>
[/html]

[javascript]
// application.js
function remove_fields(link) {
$(link).previous("input[type=hidden]").value = "1";
$(link).up(".fields").hide();
}

function add_fields(link, association, content) {
var new_id = new Date().getTime();
var regexp = new RegExp("new_" + association, "g")
$(link).up().insert({
before: content.replace(regexp, new_id)
});
}

// application_jquery.js
function remove_fields(link) {
$(link).prev("input[type=hidden]").val("1");
$(link).closest(".fields").hide();
}

function add_fields(link, association, content) {
var new_id = new Date().getTime();
var regexp = new RegExp("new_" + association, "g")
$(link).parent().before(content.replace(regexp, new_id));
}
[/javascript]

Screencast: Formulare mit verschachtelten Modellen

Fomulare mit verschachtelten Modellen lassen sich viel einfacher mit der Methode accepts_nested_attributes erstellen. Wie diese Methode benutzt werden kann, zeigt Ryan in seinem dieswöchigen Screencast.

Download:

Download (22.4 MB, 11:09)
Alternativer Download für iPod & Apple TV (15.2 MB, 11:09)

 

Resourcen:

Quellcode:

[bash]
rails surveysays
script/generate nifty_layout
script/generate nifty_scaffold survey name:string
script/generate model question survey_id:integer content:text
script/generate model answer question_id:integer content:string
rake db:migrate
[/bash]

[ruby]
# models/survey.rb
class Survey < ActiveRecord::Base
has_many :questions, :dependent => :destroy
accepts_nested_attributes_for :questions, :reject_if => lambda { |a| a[:content].blank? }, :allow_destroy => true
end

# models/question.rb
class Question < ActiveRecord::Base
belongs_to :survey
has_many :answers, :dependent => :destroy
accepts_nested_attributes_for :answers, :reject_if => lambda { |a| a[:content].blank? }, :allow_destroy => true
end

# models/answer.rb
class Answer < ActiveRecord::Base
belongs_to :question
end

# surveys_controller.rb
def new
@survey = Survey.new
3.times do
question = @survey.questions.build
4.times { question.answers.build }
end
end
[/ruby]

[html]
<!– views/surveys/_form.html.erb –>
<% form_for @survey do |f| %>
<%= f.error_messages %>
<p>
<%= f.label :name %><br />
<%= f.text_field :name %>
</p>
<% f.fields_for :questions do |builder| %>
<%= render "question_fields", :f => builder %>
<% end %>
<p><%= f.submit "Submit" %></p>
<% end %>

<!– views/surveys/_question_fields.html.erb –>
<p>
<%= f.label :content, "Question" %><br />
<%= f.text_area :content, :rows => 3 %><br />
<%= f.check_box :_destroy %>
<%= f.label :_destroy, "Remove Question" %>
</p>
<% f.fields_for :answers do |builder| %>
<%= render ‚answer_fields‘, :f => builder %>
<% end %>

<!– views/surveys/_answer_fields.html.erb –>
<p>
<%= f.label :content, "Answer" %>
<%= f.text_field :content %>
<%= f.check_box :_destroy %>
<%= f.label :_destroy, "Remove" %>
</p>
[/html]

Phusion Passenger 2.2.9 veröffentlicht

Phusion Passenger ist in Version 2.2.9 veröffentlicht worden. Dieses Release ist ein reines Bugfix-Release und löst die Kompatibilität mit Rails 3.

Das Update kann wie gewohnt über gem installiert werden.
Erst die letzte Version installieren…

[bash]
gem install passenger
[/bash]

…dann das Apache-Modul einbinden…

[bash]
passenger-install-apache2-module
[/bash]

…oder das nginx-Module.

[bash]
passenger-install-nginx-module
[/bash]

Weitere Details zu dem Release findet ihr auf den Projektseiten:
http://blog.phusion.nl/2010/01/08/phusion-passenger-2-2-9-released/

Rails 3 Beta voraussichtlich Ende Januar

Voraussichtlich wird gegen Ende diesen Monats die erste Beta Version von Rails 3 erscheinen. Weiterhin ist in diesem Quartal das endgültige Release vorgesehen.

David hat in einem Interview gesagt, dass die Beta Version für Ende Januar vorgesehen ist. Falls es diesen Monat nicht erscheint, soll eine Feature-Complete Version Anfang Februar veröffentlicht werden.

Die Merb/Rails-Fusion wurde im Dezember 2008 angekündigt und die Entwickler arbeiten mit hochdruck an diesem Release.

JavaScript KnowHow Freshup

Prototype, JQuery, Dojo…. und viele andere Frameworks basieren auf JavaScript und sollen dem Entwickler die Arbeit vereinfachen bzw. bei der Arbeit unterstützen. Trotzdem sollte jeder Web-Entwickler sich ausreichend mit JavaScript auskennen um ggf. Anpassungen vornehmen zu können oder sogar die verwendeten Frameworks zu erweitern.

Auf den Seiten von fallenrouge (http://fallenrogue.com/) könnt ihr JavaScript schrittweise erlernen oder euer JS-Wissen auffrischen. Es sind insgesamt fünf Artikel erschienen und teilweise mit Screencasts bespickt. Neben der Sprache selber werden auch nützliche Tools wie z.B. Firebug erwähnt.