resolves rdoc conflict

This commit is contained in:
Xavier Noria 2010-09-23 22:35:08 +02:00
commit 8c0c815ba7
14 changed files with 74 additions and 68 deletions

View File

@ -93,9 +93,9 @@ module ActionController
# * ActiveRecord::SessionStore - Sessions are stored in your database, which works better than PStore with multiple app servers and,
# unlike CookieStore, hides your session contents from the user. To use ActiveRecord::SessionStore, set
#
# config.action_controller.session_store = :active_record_store
# MyApplication::Application.config.session_store :active_record_store
#
# in your <tt>config/environment.rb</tt> and run <tt>rake db:sessions:create</tt>.
# in your <tt>config/initializers/session_store.rb</tt> and run <tt>script/rails g session_migration</tt>.
#
# == Responses
#

View File

@ -153,7 +153,7 @@ module ActionView #:nodoc:
#
# This refreshes the sidebar, removes a person element and highlights the user list.
#
# See the ActionView::Helpers::PrototypeHelper::GeneratorMethods documentation for more details.
# See the ActionView::Helpers::PrototypeHelper::JavaScriptGenerator::GeneratorMethods documentation for more details.
class Base
module Subclasses
end

View File

@ -211,7 +211,7 @@ module ActionView
# If you have an object that needs to be represented as a different
# parameter, like a Client that acts as a Person:
#
# <%= form_for(@post, :as => :client do |f| %>
# <%= form_for(@post, :as => :client) do |f| %>
# ...
# <% end %>
#
@ -228,8 +228,8 @@ module ActionView
# ...
# <% end %>
#
# Where +@document = Document.find(params[:id])+ and
# +@comment = Comment.new+.
# Where <tt>@document = Document.find(params[:id])</tt> and
# <tt>@comment = Comment.new</tt>.
#
# === Unobtrusive JavaScript
#
@ -656,11 +656,13 @@ module ActionView
InstanceTag.new(object_name, method, self, options.delete(:object)).to_input_field_tag("hidden", options)
end
# Returns an file upload input tag tailored for accessing a specified attribute (identified by +method+) on an object
# Returns a file upload input tag tailored for accessing a specified attribute (identified by +method+) on an object
# assigned to the template (identified by +object+). Additional options on the input tag can be passed as a
# hash with +options+. These options will be tagged onto the HTML as an HTML element attribute as in the example
# shown.
#
# Using this method inside a +form_for+ block will set the enclosing form's encoding to <tt>multipart/form-data</tt>.
#
# ==== Examples
# file_field(:user, :avatar)
# # => <input type="file" id="user_avatar" name="user[avatar]" />

View File

@ -65,7 +65,7 @@ module ActionView
# //]]>
# </script>
#
# +html_options+ may be a hash of attributes for the <tt><script></tt>
# +html_options+ may be a hash of attributes for the <tt>\<script></tt>
# tag. Example:
# javascript_tag "alert('All is good')", :defer => 'defer'
# # => <script defer="defer" type="text/javascript">alert('All is good')</script>

View File

@ -161,7 +161,7 @@ module ActionView
# JavaScriptGenerator generates blocks of JavaScript code that allow you
# to change the content and presentation of multiple DOM elements. Use
# this in your Ajax response bodies, either in a <tt><script></tt> tag
# this in your Ajax response bodies, either in a <tt>\<script></tt> tag
# or as plain JavaScript sent with a Content-type of "text/javascript".
#
# Create new instances with PrototypeHelper#update_page or with
@ -224,7 +224,7 @@ module ActionView
#
# You can also use PrototypeHelper#update_page_tag instead of
# PrototypeHelper#update_page to wrap the generated JavaScript in a
# <tt><script></tt> tag.
# <tt>\<script></tt> tag.
module GeneratorMethods
def to_s #:nodoc:
(@lines * $/).tap do |javascript|
@ -583,10 +583,10 @@ module ActionView
end
# Works like update_page but wraps the generated JavaScript in a
# <tt><script></tt> tag. Use this to include generated JavaScript in an
# <tt>\<script></tt> tag. Use this to include generated JavaScript in an
# ERb template. See JavaScriptGenerator for more information.
#
# +html_options+ may be a hash of <tt><script></tt> attributes to be
# +html_options+ may be a hash of <tt>\<script></tt> attributes to be
# passed to ActionView::Helpers::JavaScriptHelper#javascript_tag.
def update_page_tag(html_options = {}, &block)
javascript_tag update_page(&block), html_options

View File

@ -7,7 +7,7 @@ module ActiveModel #:nodoc:
# == Active Model Validator
#
# A simple base class that can be used along with
# +ActiveModel::Validations::ClassMethods.validates_with+
# ActiveModel::Validations::ClassMethods.validates_with
#
# class Person
# include ActiveModel::Validations
@ -42,7 +42,7 @@ module ActiveModel #:nodoc:
# end
# end
#
# To cause a validation error, you must add to the <tt>record<tt>'s errors directly
# To cause a validation error, you must add to the <tt>record</tt>'s errors directly
# from within the validators message
#
# class MyValidator < ActiveModel::Validator

View File

@ -386,7 +386,7 @@ class SchemaTest < ActiveModel::TestCase
assert_not_equal matz.known_attributes, rick.known_attributes, "should have had different known attributes too"
end
test "setting schema then fetching should add schema attributes to the intance attributes" do
test "setting schema then fetching should add schema attributes to the instance attributes" do
# an attribute in common with fetched instance and one that isn't
new_schema = {'age' => 'integer', 'name' => 'string',
'height' => 'float', 'bio' => 'text',

View File

@ -161,7 +161,7 @@ If you need a different session storage mechanism, you can change it in the +con
<ruby>
# Use the database for sessions instead of the cookie-based default,
# which shouldn't be used to store highly confidential information
# (create the session table with "rake db:sessions:create")
# (create the session table with "script/rails g session_migration")
# YourApp::Application.config.session_store :active_record_store
</ruby>

View File

@ -654,7 +654,7 @@ The core method of this helper, form_for, gives you the ability to create a form
<ruby>
# Note: a @person variable will have been created in the controller (e.g. @person = Person.new)
<%= form_for :person, @person, :url => { :action => "create" } do |f| %>
<%= form_for @person, :url => { :action => "create" } do |f| %>
<%= f.text_field :first_name %>
<%= f.text_field :last_name %>
<%= submit_tag 'Create' %>

View File

@ -367,7 +367,7 @@ h3. Advanced Caching
Along with the built-in mechanisms outlined above, a number of excellent plugins exist to help with finer grained control over caching. These include Chris Wanstrath's excellent cache_fu plugin (more info "here":http://errtheblog.com/posts/57-kickin-ass-w-cachefu ) and Evan Weaver's interlock plugin (more info "here":http://blog.evanweaver.com/articles/2007/12/13/better-rails-caching/ ). Both of these plugins play nice with memcached and are a must-see for anyone
seriously considering optimizing their caching needs.
Also the new "Cache money":http://github.com/nkallen/cache-money/tree/master plugin is supposed to be mad cool.
Also the new "Cache money":http://github.com/ngmoco/cache-money/tree/rails3 plugin is supposed to be mad cool.
h3. References

View File

@ -149,8 +149,6 @@ WARNING: Threadsafe operation is incompatible with the normal workings of develo
* +config.action_controller.optimise_named_routes+ turns on some optimizations in generating the routing table. It is set to +true+ by default.
* +config.action_controller.use_accept_header+ sets the rules for determining the response format. If this is set to +true+ (the default) then +respond_to+ and +Request#format+ will take the Accept header into account. If it is set to false then the request format will be determined solely by examining +params[:format]+. If there is no +format+ parameter, then the response format will be either HTML or Javascript depending on whether the request is an AJAX request.
* +config.action_controller.allow_forgery_protection+ enables or disables CSRF protection. By default this is +false+ in test mode and +true+ in all other modes.
* +config.action_controller.relative_url_root+ can be used to tell Rails that you are deploying to a subdirectory. The default is +ENV['RAILS_RELATIVE_URL_ROOT']+.

View File

@ -222,7 +222,7 @@ end
The corresponding view +app/views/articles/new.html.erb+ using +form_for+ looks like this:
<erb>
<%= form_for :article, @article, :url => { :action => "create" }, :html => {:class => "nifty_form"} do |f| %>
<%= form_for @article, :url => { :action => "create" }, :html => {:class => "nifty_form"} do |f| %>
<%= f.text_field :title %>
<%= f.text_area :body, :size => "60x12" %>
<%= submit_tag "Create" %>
@ -253,7 +253,7 @@ The helper methods called on the form builder are identical to the model object
You can create a similar binding without actually creating +&lt;form&gt;+ tags with the +fields_for+ helper. This is useful for editing additional model objects with the same form. For example if you had a Person model with an associated ContactDetail model you could create a form for creating both like so:
<erb>
<%= form_for :person, @person, :url => { :action => "create" } do |person_form| %>
<%= form_for @person, :url => { :action => "create" } do |person_form| %>
<%= person_form.text_field :name %>
<%= fields_for @person.contact_detail do |contact_details_form| %>
<%= contact_details_form.text_field :phone_number %>
@ -549,7 +549,7 @@ will produce the same output if the current year is 2009 and the value chosen by
h3. Uploading Files
A common task is uploading some sort of file, whether it's a picture of a person or a CSV file containing data to process. The most important thing to remember with file uploads is that the form's encoding *MUST* be set to "multipart/form-data". If you're using +form_for+ just using +file_field+ inside of it does the trick, but if you're using +form_tag+ +:multi_part => true+ must passed as an HTML option, in the second options hash. If you forget to do this the file will not be uploaded.
A common task is uploading some sort of file, whether it's a picture of a person or a CSV file containing data to process. The most important thing to remember with file uploads is that the rendered form's encoding *MUST* be set to "multipart/form-data". If you use +form_for+, this is done automatically. If you use +form_tag+, you must set it yourself, as per the following example.
The following two forms both upload a file.
@ -563,6 +563,8 @@ The following two forms both upload a file.
<% end %>
</erb>
NOTE: Since Rails 3.1, forms rendered using +form_for+ have their encoding set to <tt>multipart/form-data</tt> automatically once a +file_field+ is used inside the block. Previous versions required you to set this explicitly.
Rails provides the usual pair of helpers: the barebones +file_field_tag+ and the model oriented +file_field+. The only difference with other helpers is that you cannot set a default value for file inputs as this would have no meaning. As you would expect in the first case the uploaded file is in +params[:picture]+ and in the second case in +params[:person][:picture]+.
h4. What Gets Uploaded

View File

@ -39,6 +39,7 @@ The examples in this guide require that you have a working rails application. T
gem install rails
rails new yaffle_guide
cd yaffle_guide
bundle install
rails generate scaffold bird name:string
rake db:migrate
rails server
@ -51,44 +52,47 @@ NOTE: The aforementioned instructions will work for sqlite3. For more detailed
h4. Generate the Plugin Skeleton
Rails ships with a plugin generator which creates a basic plugin skeleton. Pass the plugin name, either 'CamelCased' or 'under_scored', as an argument. Pass +--with-generator+ to add an example generator also.
Rails ships with a plugin generator which creates a basic plugin skeleton. Pass the plugin name, either 'CamelCased' or 'under_scored', as an argument. Pass +--generator+ to add an example generator also.
This creates a plugin in +vendor/plugins+ including an +init.rb+ and +README+ as well as standard +lib+, +task+, and +test+ directories.
Examples:
<shell>
rails generate plugin yaffle
rails generate plugin yaffle --with-generator
rails generate plugin yaffle --generator
</shell>
To get more detailed help on the plugin generator, type +rails generate plugin+.
Later on this guide will describe how to work with generators, so go ahead and generate your plugin with the +--with-generator+ option now:
Later on this guide will describe how to work with generators, so go ahead and generate your plugin with the +--generator+ option now:
<shell>
rails generate plugin yaffle --with-generator
rails generate plugin yaffle --generator
</shell>
You should see the following output:
<shell>
create vendor/plugins/yaffle/lib
create vendor/plugins/yaffle/tasks
create vendor/plugins/yaffle/test
create vendor/plugins/yaffle/README
create vendor/plugins/yaffle/MIT-LICENSE
create vendor/plugins/yaffle/Rakefile
create vendor/plugins/yaffle
create vendor/plugins/yaffle/init.rb
create vendor/plugins/yaffle/install.rb
create vendor/plugins/yaffle/MIT-LICENSE
create vendor/plugins/yaffle/Rakefile
create vendor/plugins/yaffle/README
create vendor/plugins/yaffle/uninstall.rb
create vendor/plugins/yaffle/lib
create vendor/plugins/yaffle/lib/yaffle.rb
create vendor/plugins/yaffle/tasks/yaffle_tasks.rake
create vendor/plugins/yaffle/test/core_ext_test.rb
create vendor/plugins/yaffle/generators
create vendor/plugins/yaffle/generators/yaffle
create vendor/plugins/yaffle/generators/yaffle/templates
create vendor/plugins/yaffle/generators/yaffle/yaffle_generator.rb
create vendor/plugins/yaffle/generators/yaffle/USAGE
invoke generator
inside vendor/plugins/yaffle
create lib/generators
create lib/generators/yaffle_generator.rb
create lib/generators/USAGE
create lib/generators/templates
invoke test_unit
inside vendor/plugins/yaffle
create test
create test/yaffle_test.rb
create test/test_helper.rb
</shell>
h4. Organize Your Files
@ -99,9 +103,7 @@ To make it easy to organize your files and to make the plugin more compatible wi
|-- lib
| |-- yaffle
| `-- yaffle.rb
`-- rails
|
`-- init.rb
`-- init.rb
</shell>
<ruby>
@ -126,26 +128,26 @@ h4. Test Setup
# vendor/plugins/yaffle/test/database.yml
sqlite:
:adapter: sqlite
:dbfile: vendor/plugins/yaffle/test/yaffle_plugin.sqlite.db
adapter: sqlite
database: vendor/plugins/yaffle/test/yaffle_plugin.sqlite.db
sqlite3:
:adapter: sqlite3
:dbfile: vendor/plugins/yaffle/test/yaffle_plugin.sqlite3.db
adapter: sqlite3
database: vendor/plugins/yaffle/test/yaffle_plugin.sqlite3.db
postgresql:
:adapter: postgresql
:username: postgres
:password: postgres
:database: yaffle_plugin_test
:min_messages: ERROR
adapter: postgresql
username: postgres
password: postgres
database: yaffle_plugin_test
min_messages: ERROR
mysql:
:adapter: mysql
:host: localhost
:username: root
:password: password
:database: yaffle_plugin_test
adapter: mysql
host: localhost
username: root
password: password
database: yaffle_plugin_test
</yaml>
For this guide you'll need 2 tables/models, Hickwalls and Wickwalls, so add the following:
@ -205,7 +207,7 @@ def load_schema
ActiveRecord::Base.establish_connection(config[db_adapter])
load(File.dirname(__FILE__) + "/schema.rb")
require File.dirname(__FILE__) + '/../rails/init'
require File.dirname(__FILE__) + '/../init'
end
</ruby>
@ -218,9 +220,9 @@ Once you have these files in place, you can write your first test to ensure that
<ruby>
# vendor/plugins/yaffle/test/yaffle_test.rb
require File.dirname(__FILE__) + '/test_helper'
require 'test_helper'
class YaffleTest < Test::Unit::TestCase
class YaffleTest < ActiveSupport::TestCase
load_schema
class Hickwall < ActiveRecord::Base
@ -252,16 +254,18 @@ You should see output like:
-> 0.0220s
-- create_table(:wickwalls, {:force=>true})
-> 0.0077s
-- create_table(:woodpeckers, {:force=>true})
-> 0.0069s
-- initialize_schema_migrations_table()
-> 0.0007s
-- assume_migrated_upto_version(0)
-- assume_migrated_upto_version(0, "db/migrate")
-> 0.0007s
Loaded suite /opt/local/lib/ruby/gems/1.8/gems/rake-0.8.3/lib/rake/rake_test_loader
Started
.
Finished in 0.002236 seconds.
1 test, 1 assertion, 0 failures, 0 errors
1 test, 2 assertion, 0 failures, 0 errors, 0 skips
</shell>
By default the setup above runs your tests with sqlite or sqlite3. To run tests with one of the other connection strings specified in +database.yml+, pass the DB environment variable to rake:

View File

@ -39,10 +39,10 @@ You can also generate paths and URLs. If your application contains this code:
</ruby>
<erb>
<%= link_to "Patient Record", patients_path(@patient.id) %>
<%= link_to "Patient Record", patient_path(@patient) %>
</erb>
The router will generate the path +/patients/17+. This reduces the brittleness of your view and makes your code easier to understand.
The router will generate the path +/patients/17+. This reduces the brittleness of your view and makes your code easier to understand. Note that the id does not need to be specified in the route helper.
h3. Resource Routing: the Rails Default
@ -91,7 +91,7 @@ Creating a resourceful route will also expose a number of helpers to the control
* +photos_path+ returns +/photos+
* +new_photo_path+ returns +/photos/new+
* +edit_photo_path+ returns +/photos/edit+
* +edit_photo_path+ returns +/photos/:id/edit+
* +photo_path(id)+ returns +/photos/:id+ (for instance, +photo_path(10)+ returns +/photos/10+)
Each of these helpers has a corresponding +_url+ helper (such as +photos_url+) which returns the same path prefixed with the current host, port and path prefix.
@ -116,7 +116,7 @@ resources :videos
h4. Singular Resources
Sometimes, you have a resource that clients always look up without referencing an ID. A common example, +/profile+ always shows the profile of the currently logged in user. In this case, you can use a singular resource to map +/profile+ (rather than +/profile/:id+) to the +show+ action.
Sometimes, you have a resource that clients always look up without referencing an ID. For example, you would like +/profile+ to always show the profile of the currently logged in user. In this case, you can use a singular resource to map +/profile+ (rather than +/profile/:id+) to the +show+ action.
<ruby>
match "profile" => "users#show"
@ -370,7 +370,7 @@ When you set up a regular route, you supply a series of symbols that Rails maps
match ':controller(/:action(/:id))'
</ruby>
If an incoming request of +/photos/show/1+ is processed by this route (because it hasn't matched any previous route in the file), then the result will be to invoke the +show+ action of the +PhotosController+, and to make the final parameter +"1"+ available as +params[:id]+. This route will also route the incoming request of +/photos+ to +PhotosController+, since +:action+ and +:id+ are optional parameters, denoted by parentheses.
If an incoming request of +/photos/show/1+ is processed by this route (because it hasn't matched any previous route in the file), then the result will be to invoke the +show+ action of the +PhotosController+, and to make the final parameter +"1"+ available as +params[:id]+. This route will also route the incoming request of +/photos+ to +PhotosController#index+, since +:action+ and +:id+ are optional parameters, denoted by parentheses.
h4. Dynamic Segments
@ -434,7 +434,7 @@ You can specify a name for any route using the +:as+ option.
match 'exit' => 'sessions#destroy', :as => :logout
</ruby>
This will create +logout_path+ and +logout_url+ as named helpers in your application. Calling +logout_path+ will return +/logout+
This will create +logout_path+ and +logout_url+ as named helpers in your application. Calling +logout_path+ will return +/exit+
h4. Segment Constraints