aboutsummaryrefslogtreecommitdiffstats
path: root/railties
diff options
context:
space:
mode:
Diffstat (limited to 'railties')
-rw-r--r--railties/guides/source/getting_started.textile8
-rw-r--r--railties/guides/source/routing.textile24
-rw-r--r--railties/lib/rails/application/configuration.rb2
-rw-r--r--railties/lib/rails/generators/rails/app/templates/config/routes.rb8
-rw-r--r--railties/lib/rails/tasks/routes.rake32
-rw-r--r--railties/test/application/configuration_test.rb20
6 files changed, 67 insertions, 27 deletions
diff --git a/railties/guides/source/getting_started.textile b/railties/guides/source/getting_started.textile
index 270fbe76d2..e68a82e9db 100644
--- a/railties/guides/source/getting_started.textile
+++ b/railties/guides/source/getting_started.textile
@@ -492,7 +492,7 @@ TIP: Unlike the development web server, the console does not automatically load
h4. Listing All Posts
-The easiest place to start looking at functionality is with the code that lists all posts. Open the file +app/controllers/posts_controller.rb + and look at the +index+ action:
+The easiest place to start looking at functionality is with the code that lists all posts. Open the file +app/controllers/posts_controller.rb+ and look at the +index+ action:
<ruby>
def index
@@ -505,7 +505,7 @@ def index
end
</ruby>
-+Post.all+ calls the +Post+ model to return all of the posts currently in the database. The result of this call is an array containing the posts which has been saved in an instance variable called +@posts+.
++Post.all+ calls the +Post+ model to return all of the posts currently in the database. The result of this call is an array of posts that we store in a instance variable called +@posts+.
TIP: For more information on finding records with Active Record, see "Active Record Query Interface":active_record_querying.html.
@@ -552,7 +552,7 @@ TIP: For more details on the rendering process, see "Layouts and Rendering in Ra
h4. Customizing the Layout
-The view is only part of the story of how HTML is displayed in your web browser. Rails also has the concept of +layouts+, which are containers for views. When Rails renders a view to the browser, it does so by putting the view's HTML into a layout's HTML. In previous versions of Rails, the +rails generate scaffold+ command would automatically create a controller specific layout, like +app/views/layouts/posts.html.erb+, for the posts controller. However this has been changed in Rails 3.0. A application specific +layout+ is used for all the controllers and can be found in +app/views/layouts/application.html.erb+. Open this layout in your editor and modify the +body+ tag:
+The view is only part of the story of how HTML is displayed in your web browser. Rails also has the concept of +layouts+, which are containers for views. When Rails renders a view to the browser, it does so by putting the view's HTML into a layout's HTML. In previous versions of Rails, the +rails generate scaffold+ command would automatically create a controller specific layout, like +app/views/layouts/posts.html.erb+, for the posts controller. However this has been changed in Rails 3.0. An application specific +layout+ is used for all the controllers and can be found in +app/views/layouts/application.html.erb+. Open this layout in your editor and modify the +body+ tag:
<erb>
<!DOCTYPE html>
@@ -668,7 +668,7 @@ The +create+ action instantiates a new Post object from the data supplied by the
If the post was not successfully saved, due to a validation error, then the controller returns the user back to the +new+ action with any error messages so that the user has the chance to fix the error and try again.
-The "Post was successfully created" message is stored inside of the Rails +flash+ hash, (usually just called the Flash) so that messages can be carried over to another action, providing the user with useful information on the status of their request. In the case of +create+, the user never actually sees any page rendered during the Post creation process, because it immediately redirects to the new Post as soon Rails saves the record. The Flash carries over a message to the next action, so that when the user is redirected back to the +show+ action, they are presented with a message saying "Post was successfully created."
+The "Post was successfully created." message is stored inside of the Rails +flash+ hash, (usually just called _the flash_) so that messages can be carried over to another action, providing the user with useful information on the status of their request. In the case of +create+, the user never actually sees any page rendered during the Post creation process, because it immediately redirects to the new Post as soon Rails saves the record. The Flash carries over a message to the next action, so that when the user is redirected back to the +show+ action, they are presented with a message saying "Post was successfully created."
h4. Showing an Individual Post
diff --git a/railties/guides/source/routing.textile b/railties/guides/source/routing.textile
index d92c66cfd2..7e1b0c2e32 100644
--- a/railties/guides/source/routing.textile
+++ b/railties/guides/source/routing.textile
@@ -313,7 +313,7 @@ To add a member route, just add a +member+ block into the resource block:
<ruby>
resources :photos do
member do
- get :preview
+ get 'preview'
end
end
</ruby>
@@ -324,7 +324,7 @@ Within the block of member routes, each route name specifies the HTTP verb that
<ruby>
resources :photos do
- get :preview, :on => :member
+ get 'preview', :on => :member
end
</ruby>
@@ -335,7 +335,7 @@ To add a route to the collection:
<ruby>
resources :photos do
collection do
- get :search
+ get 'search'
end
end
</ruby>
@@ -346,7 +346,7 @@ Just as with member routes, you can pass +:on+ to a route:
<ruby>
resources :photos do
- get :search, :on => :collection
+ get 'search', :on => :collection
end
</ruby>
@@ -516,6 +516,22 @@ match 'photos/*other' => 'photos#unknown'
This route would match +photos/12+ or +/photos/long/path/to/12+, setting +params[:other]+ to +"12"+ or +"long/path/to/12"+.
+Wildcard segments do not need to be last in a route. For example
+
+<ruby>
+match 'books/*section/:title' => 'books#show'
+</ruby>
+
+would match +books/some/section/last-words-a-memoir+ with +params[:section]+ equals +"some/section"+, and +params[:title]+ equals +"last-words-a-memoir"+.
+
+Techincally a route can have even more than one wildard segment indeed, the matcher assigns segments to parameters in an intuitive way. For instance
+
+<ruby>
+match '*a/foo/*b' => 'test#index'
+</ruby>
+
+would match +zoo/woo/foo/bar/baz+ with +params[:a]+ equals +"zoo/woo"+, and +params[:b]+ equals +"bar/baz"+.
+
h4. Redirection
You can redirect any path to another path using the +redirect+ helper in your router:
diff --git a/railties/lib/rails/application/configuration.rb b/railties/lib/rails/application/configuration.rb
index 465851c0e6..c3418e0d80 100644
--- a/railties/lib/rails/application/configuration.rb
+++ b/railties/lib/rails/application/configuration.rb
@@ -16,9 +16,9 @@ module Rails
def initialize(*)
super
+ self.encoding = "utf-8"
@allow_concurrency = false
@consider_all_requests_local = false
- @encoding = "utf-8"
@filter_parameters = []
@dependency_loading = true
@serve_static_assets = true
diff --git a/railties/lib/rails/generators/rails/app/templates/config/routes.rb b/railties/lib/rails/generators/rails/app/templates/config/routes.rb
index d42cf3bfdf..3e35d81a69 100644
--- a/railties/lib/rails/generators/rails/app/templates/config/routes.rb
+++ b/railties/lib/rails/generators/rails/app/templates/config/routes.rb
@@ -16,12 +16,12 @@
# Sample resource route with options:
# resources :products do
# member do
- # get :short
- # post :toggle
+ # get 'short'
+ # post 'toggle'
# end
#
# collection do
- # get :sold
+ # get 'sold'
# end
# end
@@ -35,7 +35,7 @@
# resources :products do
# resources :comments
# resources :sales do
- # get :recent, :on => :collection
+ # get 'recent', :on => :collection
# end
# end
diff --git a/railties/lib/rails/tasks/routes.rake b/railties/lib/rails/tasks/routes.rake
index a99232c4be..c0a2fe38bd 100644
--- a/railties/lib/rails/tasks/routes.rake
+++ b/railties/lib/rails/tasks/routes.rake
@@ -1,21 +1,35 @@
desc 'Print out all defined routes in match order, with names. Target specific controller with CONTROLLER=x.'
task :routes => :environment do
Rails.application.reload_routes!
- all_routes = ENV['CONTROLLER'] ? Rails.application.routes.routes.select { |route| route.defaults[:controller] == ENV['CONTROLLER'] } : Rails.application.routes.routes
+
+ all_routes = Rails.application.routes.routes
+ named_routes = Rails.application.routes.named_routes.routes
+
+ if ENV['CONTROLLER']
+ all_routes = all_routes.select{ |route| route.defaults[:controller] == ENV['CONTROLLER'] }
+ end
+
routes = all_routes.collect do |route|
# TODO: The :index method is deprecated in 1.9 in favor of :key
# but we don't have :key in 1.8.7. We can remove this check when
# stop supporting 1.8.x
- key_method = Hash.method_defined?('key') ? 'key' : 'index'
- name = Rails.application.routes.named_routes.routes.send(key_method, route).to_s
- reqs = route.requirements.empty? ? "" : route.requirements.inspect
+ key = Hash.method_defined?('key') ? 'key' : 'index'
+ name = named_routes.send(key, route).to_s
+
+ reqs = route.requirements.dup
+ reqs[:to] = route.app unless route.app.is_a?(ActionDispatch::Routing::RouteSet::Dispatcher)
+ reqs = reqs.empty? ? "" : reqs.inspect
+
{:name => name, :verb => route.verb.to_s, :path => route.path, :reqs => reqs}
end
- routes.reject!{ |r| r[:path] == "/rails/info/properties" } # skip the route if it's internal info route
- name_width = routes.collect {|r| r[:name]}.collect {|n| n.length}.max
- verb_width = routes.collect {|r| r[:verb]}.collect {|v| v.length}.max
- path_width = routes.collect {|r| r[:path]}.collect {|s| s.length}.max
+
+ routes.reject! { |r| r[:path] == "/rails/info/properties" } # Skip the route if it's internal info route
+
+ name_width = routes.map{ |r| r[:name] }.map(&:length).max
+ verb_width = routes.map{ |r| r[:verb] }.map(&:length).max
+ path_width = routes.map{ |r| r[:path] }.map(&:length).max
+
routes.each do |r|
puts "#{r[:name].rjust(name_width)} #{r[:verb].ljust(verb_width)} #{r[:path].ljust(path_width)} #{r[:reqs]}"
end
-end
+end \ No newline at end of file
diff --git a/railties/test/application/configuration_test.rb b/railties/test/application/configuration_test.rb
index 9928ee2c52..d63d25b42e 100644
--- a/railties/test/application/configuration_test.rb
+++ b/railties/test/application/configuration_test.rb
@@ -172,17 +172,27 @@ module ApplicationTests
assert $prepared
end
+ def assert_utf8
+ if RUBY_VERSION < '1.9'
+ assert_equal "UTF8", $KCODE
+ else
+ assert_equal Encoding::UTF_8, Encoding.default_external
+ assert_equal Encoding::UTF_8, Encoding.default_internal
+ end
+ end
+
+ test "skipping config.encoding still results in 'utf-8' as the default" do
+ require "#{app_path}/config/application"
+ assert_utf8
+ end
+
test "config.encoding sets the default encoding" do
add_to_config <<-RUBY
config.encoding = "utf-8"
RUBY
require "#{app_path}/config/application"
-
- unless RUBY_VERSION < '1.9'
- assert_equal Encoding::UTF_8, Encoding.default_external
- assert_equal Encoding::UTF_8, Encoding.default_internal
- end
+ assert_utf8
end
test "config.paths.public sets Rails.public_path" do