Rails 4: List of available datatypes

Here are all the Rails 4 (ActiveRecord migration) datatypes: :binary :boolean :date :datetime :decimal :float :integer :bigint :primary_key :references :string :text :time :timestamp Source: http://api.rubyonrails.org/classes/ActiveRecord/ConnectionAdapters/SchemaStatements.html#method-i-add_column These are the same as with Rails 3. If you use PostgreSQL, you can also take advantage of these: :hstore :json :jsonb :array :cidr_address :ip_address :mac_address They are stored as … Read more

How do I handle too long index names in a Ruby on Rails ActiveRecord migration?

Provide the :name option to add_index, e.g.: add_index :studies, [“user_id”, “university_id”, “subject_name_id”, “subject_type_id”], unique: true, name: ‘my_index’ If using the :index option on references in a create_table block, it takes the same options hash as add_index as its value: t.references :long_name, index: { name: :my_index }

In Ruby on Rails, what’s the difference between DateTime, Timestamp, Time and Date?

The difference between different date/time formats in ActiveRecord has little to do with Rails and everything to do with whatever database you’re using. Using MySQL as an example (if for no other reason because it’s most popular), you have DATE, DATETIME, TIME and TIMESTAMP column data types; just as you have CHAR, VARCHAR, FLOAT and … Read more

What is the easiest way to duplicate an activerecord record?

To get a copy, use the dup (or clone for < rails 3.1+) method: #rails >= 3.1 new_record = old_record.dup # rails < 3.1 new_record = old_record.clone Then you can change whichever fields you want. ActiveRecord overrides the built-in Object#clone to give you a new (not saved to the DB) record with an unassigned ID. … Read more

How can I call controller/view helper methods from the console in Ruby on Rails?

To call helpers, use the helper object: $ ./script/console >> helper.number_to_currency(‘123.45′) => “R$ 123,45” If you want to use a helper that’s not included by default (say, because you removed helper :all from ApplicationController), just include the helper. >> include BogusHelper >> helper.bogus => “bogus output” As for dealing with controllers, I quote Nick’s answer: … Read more

How do I make a column unique and index it in a Ruby on Rails migration?

The short answer for old versions of Rails (see other answers for Rails 4+): add_index :table_name, :column_name, unique: true To index multiple columns together, you pass an array of column names instead of a single column name, add_index :table_name, [:column_name_a, :column_name_b], unique: true If you get “index name… is too long”, you can add name: … Read more

Difference between string and text in rails?

The difference relies in how the symbol is converted into its respective column type in query language. with MySQL :string is mapped to VARCHAR(255) https://edgeguides.rubyonrails.org/active_record_migrations.html :string | VARCHAR | :limit => 1 to 255 (default = 255) :text | TINYTEXT, TEXT, MEDIUMTEXT, or LONGTEXT2 | :limit => 1 to 4294967296 (default = 65536) Reference: Working … Read more

Undo scaffolding in Rails

First, if you have already run the migrations generated by the scaffold command, you have to perform a rollback first. rake db:rollback You can create scaffolding using: rails generate scaffold MyFoo (or similar), and you can destroy/undo it using rails destroy scaffold MyFoo That will delete all the files created by generate, but not any … Read more

How to redirect to a 404 in Rails?

Don’t render 404 yourself, there’s no reason to; Rails has this functionality built in already. If you want to show a 404 page, create a render_404 method (or not_found as I called it) in ApplicationController like this: def not_found raise ActionController::RoutingError.new(‘Not Found’) end Rails also handles AbstractController::ActionNotFound, and ActiveRecord::RecordNotFound the same way. This does two … Read more