Recent notes
RSS feed
Setting HTTP_REFERER
If your integration test is checking for correct behavior of a redirect to the request referer, you can set the referring path in the headers hash with syntax like:
patch update_user_role_path, { user: {role: "vip"} }, { 'HTTP_REFERER' => user_url } assert_redirected_to user_url

Not quite opposite of new_record?
new_record? will not check if the record has been destroyed

Not quite opposite of persisted?
persisted? will also check if the record has not been destroyed

Rails 3.2.19
As Jebin reported, we are not getting the value in array format when we set the hidden_field_tag with an Array variable, instead it is a String that we are getting.

Find and Detech are the same
@rubynooby: #find and #detect are aliases of the same underlying method. You can use them interchangeably to provide additional readability to your code (find an element to use it or detect if an element is present to do something).
http://ruby-doc.org/core-2.2.3/Enumerable.html#method-i-find

What you really want is
The official Ruby documentation is available for this here http://ruby-doc.org/stdlib-2.2.3/libdoc/rss/rdoc/RSS.html
But the library that will be most helpful to you is called Feedjira: http://feedjira.com/

instead of memoize
See this for deprecated github.com/rails/rails/commit/36253916b0b788d6ded56669d37c96ed05c92c5c
use
def something return @_var if defined? @_var # more code end

Re: close but no bananna
Actually, @tarasevich is right on this. Let’s have a look at your own example:
[["1","2"],["3","4"]].flat_map {|i| i[0] } # => ["1", "3"] [["1","2"],["3","4"]].map {|i| i[0] }.flatten # => ["1", "3"] [["1","2"],["3","4"]].flatten.map {|i| i[0] } # => ["1", "2", "3", "4"]
You are right that both #map and #flatten are non-commutative, it does matter which method is called first.
But #flat_map is equivalent to mapping first and then concatenating (flatten) the results, even if the name might suggest the opposite.
To correctly interpret the method name, you should think of it mathematically as a function composition.

close but no bananna
@tarasevich noted that
a.flat_map(&b) works exactly like a.map(&b).flatten!(1)
This is backwards because map and flatten are not always interchangeable in order. Mapping over the example array only gives you 2 items. This can result in significant differences depending on what you’re doing in the map. This is easier to demonstrate if we change the example to strings.
[["1","2"],["3","4"]].map {|i| i[0] } # => ["1", "3"] [["1","2"],["3","4"]].map {|i| i[0] }.flatten # => ["1", "3"]
BUT if you swap the order
[["1","2"],["3","4"]].flatten.map {|i| i[0] } # => ["1", "2", "3", "4"]
in order to remember what it is equivalent to just note that the method name is already in the correct order. flat_map -> flatten + map

Possible bug
Works as expected for non bang methods
> a={x:1, y:2, z:3} => {:x=>1, :y=>2, :z=>3} > a.slice(:y) => {:y=>2} > a.except(:y) => {:x=>1, :z=>3}
Bug on slice! it behaves like except!
> a.clone.slice!(:y) => {:x=>1, :z=>3} > a.clone.except!(:y) => {:x=>1, :z=>3}
slice! should return {:y=>2} and modify a to no longer have it

Multiple files
To use multiple file upload need to use variable_name[].
like this:
file_field_tag 'files[]', :multiple => true
and in controller:
if !params[ :files ].nil? params[ :files ].each{ |file| # do your staff } end

"Class methods on your model are automatically available on scopes."
The final example above – “Class methods on your model are automatically available on scopes.” – contains a subtle but vital change from earlier versions of the doc – namely, “pluck” (current example) vs “map” (old example). The former works, the latter does not. See http://github.com/rails/rails/issues/21943 for confirmation that the old documentation is incorrect, and for a workaround.
(Spoiler alert: Use
all.map(&:title)
instead of just
map(&:title)
in order to achieve the same effect.)

"Class methods on your model are automatically available on scopes."
The final example above – “Class methods on your model are automatically available on scopes.” – does not work as written. See http://github.com/rails/rails/issues/21943 for confirmation that the old documentation is incorrect, and for a workaround.
(Spoiler alert: Use
all.map(&:title)
instead of just
map(&:title)
in order to achieve the same effect.)

arel_table order by
More objected way how to achieve ORDOR BY .… DESC is like this :
class User < ActiveRecord::Base has_many :status_changes def latest_status_change status_changes .order(StatusChange.arel_table['created_at'].desc) .first end end class StatusChange < ActiverRecord::Base belongs_to :user end
resulting in:
SELECT "status_changes".* FROM "status_changes" WHERE "status_changes"."user_id" = 1 ORDER BY "status_changes"."created_at" DESC
Benefits:
-
you are strictly bound to Modelclass name => renaming table in model will not break the sql code (of if it will, it will explicitly break the syntax on Ruby level, not DB level)
-
you still have the benefit of explicitly saying what table.column the order should be
-
easier to re-factor parts to Query Objects

Getting the return value from the underlying method of an Enumerator
This is documented in the example code, but easy to miss.
When you get an Enumerator using #to_enum(:method_name, …), you can get all of the yielded values using #next, but not the value that is finally returned.
That value can be retrieved via the #result attribute of the StopIteration exception object that is raised when calling #next after the underlying method has returned.

Warning: prevents persistence but doesn't prevent setting
For example:
class Widget < ActiveRecord::Base attr_readonly :key end w = Widget.create! key: 'foo' w.update! key: 'bar' w.key #=> 'bar' w.reload.key #=> 'foo'

Favicon generator
Hello, I suggest you to try this favicon generator and creator, http://onlinefavicon.com/ , you can create favicon using drawing tool or add picture jpg or other file and make 16x16 or 32x32 ICO file, also see the gallery with favicons from other users or download the same, at end you can read description how to set up favicon to your site!

Text and Image together in #link_to
Code Example
link_to “Hello World #{ image_tag(‘web/worl.png’) }”.html_safe, some_path

Using Arel
You can also use Arel.
For example:
class ArticlePage < ActiveRecord::Base belongs_to :article scope :published, -> { where.not(published_at: nil) } scope :all_ready, -> { select("every(workflow_state = 'ready') AS is_ready") } end class Article < ActiveRecord::Base has_many :article_pages def all_ready? ActiveRecord::Base.select_values(article_pages.all_ready,published) = 't' end end

Add method to instacne eval
We can add method to instance by using instance_eval.
Code example
string = "String" string.instance_eval do def new_method self.reverse end end
Output
irb(main):033:0> string.new_method => "gnirtS"

define_method with default parameters
To define a method with a default parameter the usual notation can be used:
define_method("example") do |fixed, default = {}| # something end

Skip validation
update_all : skip validations, and will save the object to the database regardless of its validity. They should be used with caution.

Also takes a block
You can define methods within a block
User = Struct.new(:first_name, :last_name) do def full_name "#{first_name} #{last_name}" end end user = User.new('Simon', 'Templar') # => #<struct User first_name="Simon", last_name="Templar"> user.full_name # => "Simon Templar"

I would just use a validation instead of (the probably removed) :required
Just make sure you validate the presence of the association and not the foreign key, otherwise it will not work on new records.
The down side is that it will require the record in the cache, and will make a query otherwise. You can add `unless: :<foreign_key>?` If that’s a problem for you.

Is :required still valid ?
I get this error when using :required => true
ArgumentError: Unknown key: :required. Valid keys are: :class_name, :class, :foreign_key, :validate, :autosave, :remote, :dependent, :primary_key, :inverse_of, :foreign_type, :polymorphic, :touch, :counter_cache
Is :required not a valid key anymore ?

Correction to previous comment
You’ve misread the documentation, @sandyjoins. If you pass two arguments, the second one is a length argument, not an upper bound.
“Hello there”.byteslice(6, 1) == “t”


If you want to do a quick delete with no callbacks, use `delete_all`.
Person.where( thing: nil ).delete_all

For supported arguments, see see match
As of July, 2015, the v4.2.1 doc says “see match[rdoc-ref:Base#match]” without a URL. I think you want this one: http://apidock.com/rails/ActionDispatch/Routing/Mapper/Base/match

Usage with enum
With enum fields you must use integer values:
code
Model.update_all(type: Model.types[specific_type])