324

I'm trying to generate a new model and forget the syntax for referencing another model's ID. I'd look it up myself, but I haven't figured out, among all my Ruby on Rails documentation links, how to find the definitive source.

$ rails g model Item name:string description:text (and here either reference:product or references:product). But the better question is where or how can I look for this kind of silliness easily in the future?

Note: I've learned the hard way that if I mistype one of these options and run my migration then Ruby on Rails will totally screw up my database... and rake db:rollback is powerless against such screwups. I'm sure I'm just not understanding something, but until I do... the "detailed" information returned by rails g model still leaves me scratching...

3
  • What about :uniq and :index field options? Like in "rails g model title body:text tracking_id:integer:uniq". I couldn't find documentation for those. Are there any more? Commented Feb 12, 2013 at 13:24
  • 14
    rails generate model --help Commented Jan 21, 2014 at 18:51
  • 1
    Using a version control would provide you with an easy way to rollback any generated files. And if the problem is in the database... well, you can always do db:schema:load Commented Mar 6, 2015 at 15:59

8 Answers 8

507
:primary_key, :string, :text, :integer, :float, :decimal, :datetime, :timestamp,
:time, :date, :binary, :boolean, :references

See the table definitions section.

Sign up to request clarification or add additional context in comments.

15 Comments

hmm...no mention of :reference or :references in your answer or an explanation of how to pass it to generators in the link you provided?!?
That doesn't answer the question at all.
Selected this as the answer but know that :references is also an option.
Is there some documentation that actually defines these column types? For instance, how does string differ from text?
@Kangur the uniq and index suffixes (and all the types) are documented in the usage of rails generate model. Run rails g model to see the usage docs.
|
192

To create a model that references another, use the Ruby on Rails model generator:

$ rails g model wheel car:references

That produces app/models/wheel.rb:

class Wheel < ActiveRecord::Base
  belongs_to :car
end

And adds the following migration:

class CreateWheels < ActiveRecord::Migration
  def self.up
    create_table :wheels do |t|
      t.references :car

      t.timestamps
    end
  end

  def self.down
    drop_table :wheels
  end
end

When you run the migration, the following will end up in your db/schema.rb:

$ rake db:migrate

create_table "wheels", :force => true do |t|
  t.integer  "car_id"
  t.datetime "created_at"
  t.datetime "updated_at"
end

As for documentation, a starting point for rails generators is Ruby on Rails: A Guide to The Rails Command Line which points you to API Documentation for more about available field types.

1 Comment

slightly out of date with the comment, but this is the answer for this question. +1
8

$ rails g model Item name:string description:text product:references

I too found the guides difficult to use. Easy to understand, but hard to find what I am looking for.

Also, I have temp projects that I run the rails generate commands on. Then once I get them working I run it on my real project.

Reference for the above code: http://guides.rubyonrails.org/getting_started.html#associating-models

Comments

3

Remember to not capitalize your text when writing this command. For example:

Do write:

rails g model product title:string description:text image_url:string price:decimal

Do not write:

rails g Model product title:string description:text image_url:string price:decimal

At least it was a problem to me.

4 Comments

Wait?!? What? I capitalize my model names all the time! What "problems" are you seeing?
I'm not talking about the name of your model, but the name 'Model'. I tried to create a model like this: rails g Model product title:string and got: Could not find generator Model. so i tried it like this: rails g model product title:string and it worked.
Ah. Hadn't encountered that b4. Good tip!
(It's not the model name that's the issue, it's the word model as referring to the generator. rails g model Product … is fine.)
3

http://guides.rubyonrails.org should be a good site if you're trying to get through the basic stuff in Ruby on Rails.

Here is a link to associate models while you generate them: http://guides.rubyonrails.org/getting_started.html#associating-models

Comments

0

It's very simple in ROR to create a model that references other.

rails g model Item name:string description:text product:references

This code will add 'product_id' column in the Item table

Comments

0

There are lots of data types you can mention while creating model, some examples are:

:primary_key, :string, :text, :integer, :float, :decimal, :datetime, :timestamp, :time, :date, :binary, :boolean, :references

syntax:

field_type:data_type

Comments

0

I had the same issue, but my code was a little bit different.

def new
 @project = Project.new
end

And my form looked like this:

<%= form_for @project do |f| %>
     and so on....
<% end %>

That was totally correct, so I didn't know how to figure it out.

Finally, just adding

url: { projects: :create }

after

<%= form-for @project ...%>

worked for me.

1 Comment

This may be a good answer but I'm not sure how it relates to the OP which is about field types (:integer, :string, etc…).

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.