Want to receive a weekly email containing
the scoop on our new titles along with the
occasional special offer? Just click the button.
(You can always unsubscribe later by editing your
account information).

Give us an email and a password (you can use the password later to log in and
change your preferences). We'll send you a newsletter roughly once a week.

ChangesInRails30

This page shows changes in Rails 3.0 that affect the sample code in Agile Web Development with Rails, Edition 3. As page numbers in the paper and PDF copies differ, this information is organized first by section number, then it lists both page numbers, paper copy first.

Meanwhile, a live status of an updated Edition 3 scenario (as well as a developing Edition 4 scenario) under various versions of Rails and Ruby is available. Note that page is based on pulling Rails from git (and for 1.8.8 and 1.9.2, Ruby from svn) so it will often reflect failures that will not ever make it in beta or RC form.

11.1 Iteration F1: Adding Users

Page 158/164: The preferred way to order the users returned in the index is now:

@users = User.order(:name)

Page 159/165: Instead of a separate line assigning flash[:notice], there now is a :notice parameter on the format.html call.

Page 160/166: Scaffold generated code for index.html.erb now uses a block to do iteration instead of a for loop

<% @users.each do |user| %>

Page 160/166: Insert the following at the top of app/views/users/index.html

<p class="notice"><%= notice %></p>

Page 160/166: The form can now be found in app/views/users/_form.html.erb

Page 160/166: use of form_for now requires the use the <%= syntax

Page 161/167: there is no app/views/layouts/users.html.erb to be updated, or even a need to update anything as this change has already been made to the common application layout.

11.2 Iteration F2: Logging In

Page 163/169: use of form_for now requires the use the <%= syntax

11.3 Iteration F3: Limiting Access

Page 166/172: application.rb is now application_controller.rb

11.4 Iteration F4: A Sidebar, More Administration.

Page 168/174: application.rb is now application_controller.rb

Page 168/174: instead of adding a line declaring a layout of “store”, modify the exiting line that indicates a layout of “application” to say layout “store”.

Page 169/174: use of hidden_div_if now requires use the <%= syntax

13.1 Iteration I1: Enabling Translation

* Page 187/193: omit the setting of LOCALES_DIRECTORY (alternately, use Rails.root instead of RAILS_ROOT).
* Page 188/194: use of form_for now requires the use the <%= syntax
* Page 190/196: application.rb is now application_controller.rb
* Page 191/197: use of form_tag now requires the use the <%= syntax
* Page 193/199: use of form_remote_tag now requires the use the <%= syntax
* Page 193/199: change main.title to main.title_html in order to use html entities.
* Page 194/200: change es.main.title to es.name.title_html.
* Page 197/203: use of form_for now requires the use the <%= syntax
* Page 197/203: In place of the h2 line (not shown in book, inserted in section 10.1 above), insert the following:

Page 209/214: lines of the form product.errors.invalid?(:title) need to be changed to product.errors[:title].any?

14.3 Functional Testing of Controllers

Page 221/226: application.rb is now application_controller.rb

16.2 Enumerations and Arrays

Page 273/277: :skip_last_comma has been deprecated. Use :last_word_connector instead.

16.9 Unicode support

Page 283/287: name.chars.reverse is now name.mb_chars.reverse
Page 284/288: person.name.chars is now person.name.mb_chars (twice on this page)

21.2 Routing Requests

Page 424/428: add the following as the first action after starting script/console:
ActionController::Base.session_store = nil
Page 425/429: it is no longer possible to get Rails routing to pretend the application contains controllers that have not been written yet.
Page 430/435: rs.generate “store” now produces /store/index and rs.generate “store”, :id => 123 now produces /store/index?id=123.
Page 431/436: some of these examples return /blog/show_date?... instead
Page 433/427: overwrite_params is no longer supported. To get the same effect, you now need to specify each parameter.

21.4 Testing Routing

Page 455/459: the excerpt in the book doesn’t show it, but if you download routing_conditions_test.rb and wish to execute it, you will need to add require "config/routes_with_conditions.rb" to the beginning of config/routes.rb. After this is done, you can remove the setup method entirely from RoutingTest as it is unnecessary.

23 Action View

Page 505-560/508-562 Every example of the form <% ... do > needs to be converted to <= ... do %>

23.3 Helpers for Formatting, Linking, and Pagination

Page 518/521: A new version of the will_paginate gem is required, and the installation instructions have changed:
add gem 'will_paginate', '>= 3.0.pre' to Gemfile
execute bundler install

23.11 Adding New Templating Systems

Page 557/560: Updated rdoc_template that works with Rails 3.0.
Page 558/560: application.rb is now application_controller.rb
Page 558/561: you will also need to add gem 'rdoc' to your Gemfile
Page 558/561: name the templates example.html.rdoc and test.text.reval respectively.
Page 559/563: Updated eval_template that works with Rails 3.0.

25.1 Sending E-mail

Page 611/613: confirm.erb can now be found in confirm.text.erb
Page 612/614:
the second parameter to truncate now must be a hash, thus: :length => 50.
order_mailer.rb can now be found in the app/mailer directory (this change also applies to the next page)
_line_item.erb should now be named _line_item.text.erb
Page 614/616:
sent.erb should now be named sent.html.erb. Additionally, remove the sent.text.erb that was generated.
change render(:partial => "html_line_item") to render(:partial => "line_item")

25.3 Testing E-mail

Page 621/623: replace the following files:
test/unit/order_mailer_test.rb (to be placed in the test/functional directory)
test/fixtures/order_mailer/sent
test/fixtures/order_mailer/confirm

26.2 Show Me the Code!

Page 626/628: After cd depot_client, edit config/routes.rb, and uncomment the following line:
match ':controller(/:action(/:id(.:format)))'
Page 628/630: application.rb is now application_controller.rb

26.3 Relationships and Collections

Page 630/632: the config/routes.rb line now needs to look like this:
resources(:orders) { resources :line_items }