ChatGPT解决这个技术问题 Extra ChatGPT

Ruby on Rails generates model field:type - what are the options for field:type?

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...

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?
rails generate model --help
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

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

See the table definitions section.


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.
P
Peter Mortensen

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.


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

$ 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


B
Barranka

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.


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.)
P
Peter Mortensen

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


c
chandanjha

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


C
Coding Enthusiast

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

C
Coding Enthusiast

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.


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…).