Notes
Community contributions, tips, and corrections to the documentation. (1708 notes)
@ssoroka and @drova and future readers
I guess these two have already found a solution, but future readers might have not. index and references do not map perfectly
change_table :foo do |t|
t.references :bar
t.index :bar_id
end
references gets the model name while index gets the column name.
Not working in create_table
When using the index method within a +create_table+ statement, it does not have any side effect - at least not in MySQL.
create_table :comment do |t|
t.belongs_to :post
t.timestamps
# not working inside create_table !
t.index :post_id
end
It is working properly in +change...
More Examples
=== Code
class User < Struct.new(:name, :age, :gender)
end
user = User.new("Matz", 43, "male")
:defaults no longer work
I'm afraid that :defaults option doesn't work anymore.
<%= javascript_include_tag :defaults %>
it loads "defaults.js"
Instead, to load all .js files now use
<%= javascript_include_tag "application" %>
:only, :except and passing in multiple parameters
To specify that the filter should be applied to or excluded from given controller actions, use the :only and :except parameters. To pass in multiple controller actions use an array:
after_filter :authorize, :except => [:index, :show]
after_filter :authorize, :only => :delete
Stolen from: h...
reject
This is inverse operation of select. If block return false add item to array.
[1,2,3,4].reject {|n| n%2==0}
[1, 3]
Like select method with inverse.
undocumented events/symbol/types
@nessur is right: drop the "before_" and "after_" prefixes and you have the possible values for the uninformatively named symbol param: create, save, update and validate.
So to remove all validations for a model do: reset_callbacks :validate
To use with factory_girl and prevent leaking file handles
As insane-dreamer noted, to use with factory_girl:
Factory :video_file do
file { fixture_file_upload 'test.png', 'image/png' }
end
However, I ran into an issue where one of our spec's was creating a few hundred files and would then crash with:
Errno::EMFILE: Too many open files
I...
Requires a Block.
Just a little heads up here because it's not obvious.
This requires a block to be passed to it.
==== Example Usage
say_with_time "Reverting all service rates to nil." do
Service.update_all( :rate, nil )
end
# Output
-- Reverting all service rates to nil.
-> 0.345...
Example Usage
=== End of Day for Any Date
DateTime.new( 2011, 01, 01 )
# => Sat, 01 Jan 2011 00:00:00 +0000
DateTime.new( 2011, 01, 01 ).end_of_day
# => Sat, 01 Jan 2011 23:59:59 +0000
=== With Local Timezone
DateTime.civil_from_format( :local, 2011, 01, 01 ).end_of_day
# => Sat, 01 Ja...
Stubs Logger in rspec
Let we have a module like below:
module MyModule
class << self
def logger
@logger ||= Logger.new(File.join(Rails.root, "log", "my_gem_#{Rails.env}.log"))
end
end
end
To use this logger just type:
MyModule.logger.info "This is a log...
Example
Check if id column exists in users table
ActiveRecord::Base.connection.column_exists?(:users, :id)
Pluralize with Text.
== Example 1 person or 3 people
== Use a View Helper pluralize( 1, 'person' ) # => 1 person
pluralize( 2, 'person' )
# => 2 people
# In practice.
pluralize( Person.count, 'person' )
== See http://apidock.com/rails/ActionView/Helpers/TextHelper/pluralize
Options
I came across the following situation An article has a history of friendly url being that the foreign key that represents the value of the article's id in the table is called Friend url_id then in that case:
Article.joins("INNER JOIN friends ON articles.id = friends.url_id").where("friends.url like...
link_to with :as routing
The following will not work when your post model is routed with the :as option: link_to("View post", @post) Instead, use the helper with your custom name: link_to("View post", :url => renamedpost_path(@post))
form_for with :as routing
The following will not work if your post model is routed with the :as option: form_for(@post) Instead, use the helper with your custom name: form_for(@post, :url => edit_renamedpost_path(@post))
Model objects routed with :as
When providing a model object, url_for will not work if the model's routes are named using the :as option. You can instead use the named helper methods (posts_path, post_path(:id), etc.).
Total Unique Elements: Set Union
For total unique elements, see set union: http://apidock.com/ruby/Array/|
with a params constant
If you want to have a params with the same value on all of the urls in this namespace, you can write this :
==== with a constant param :admin set to true namespace :admin, :admin => true do resources :posts end
all of the urls like /admin/post have a param :admin with the value true....