Ruby on Rails genera campo modelo: tipo: ¿cuáles son las opciones para campo: tipo?

308

Estoy tratando de generar un nuevo modelo y olvidar la sintaxis para hacer referencia a la ID de otro modelo. Lo buscaría yo mismo, pero no he descubierto, entre todos mis enlaces de documentación de Ruby on Rails, cómo encontrar la fuente definitiva.

$ rails g model Item name:string description:text(y aquí tampoco reference:producto references:product). Pero la mejor pregunta es ¿ dónde o cómo puedo buscar este tipo de tonterías fácilmente en el futuro?

Nota: He aprendido por las malas que si escribo mal una de estas opciones y ejecuto mi migración , Ruby on Rails rake db:rollbackarruinará totalmente mi base de datos ... y será impotente ante tales errores. Estoy seguro de que simplemente no entiendo algo, pero hasta que lo haga ... la información "detallada" devuelta por rails g modeltodavía me deja rascando ...

Meltemi
fuente
¿Qué pasa con: uniq y: opciones de campo de índice? Como en "rieles g cuerpo del título del modelo: texto tracking_id: integer: uniq". No pude encontrar documentación para esos. ¿Hay más?
Kangur
11
rails generate model --help
Dennis
1
El uso de un control de versión le proporcionaría una manera fácil de deshacer cualquier archivo generado. Y si el problema está en la base de datos ... bueno, siempre puedes hacer db: schema: load
Hector Ordonez
1
así que ha sido visto más de 140K veces y 243 personas a partir de hoy encontró útil así que no es una pregunta tonta por cualquier medio :)
BKSpurgeon

Respuestas:

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

Consulte la sección de definiciones de tabla .

Paul Schreiber
fuente
13
hmm ... no se menciona :referenceo :referencesen su respuesta o una explicación de cómo pasarlo a los generadores en el enlace que proporcionó?!?
Meltemi
53
Eso no responde a la pregunta en absoluto.
MikeEL 01 de
1
Seleccioné esto como la respuesta, pero sé que : las referencias también son una opción.
Meltemi
14
¿Existe alguna documentación que realmente defina estos tipos de columna? Por ejemplo, ¿en qué stringdifiere de text?
Grant Birchmeier el
3
@Kangur los sufijos uniqy index(y todos los tipos) están documentados en el uso de rails generate model. Ejecute rails g modelpara ver los documentos de uso.
Dennis
188

Para crear un modelo que haga referencia a otro, use el generador de modelos Ruby on Rails:

$ rails g model wheel car:references

Eso produce app / models / wheel.rb :

class Wheel < ActiveRecord::Base
  belongs_to :car
end

Y agrega la siguiente migración:

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

Cuando ejecuta la migración, lo siguiente terminará en su 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

En cuanto a la documentación, un punto de partida para los generadores de rieles es Ruby on Rails: una guía de la línea de comando de Rails que lo dirige a la documentación API para obtener más información sobre los tipos de campo disponibles.

Troya
fuente
44
ligeramente desactualizado con el comentario, pero esta es la respuesta a esta pregunta. +1
omninonsense
7

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

También encontré las guías difíciles de usar. Fácil de entender, pero difícil de encontrar lo que estoy buscando.

Además, tengo proyectos temporales en los que ejecuto los rails generatecomandos. Luego, una vez que los hago funcionar, lo ejecuto en mi proyecto real.

Referencia para el código anterior: http://guides.rubyonrails.org/getting_started.html#associating-models

B Seven
fuente
3

Recuerde no poner en mayúscula su texto al escribir este comando. Por ejemplo:

Escribir:

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

No escribas:

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

Al menos fue un problema para mí.

Victor Augusto
fuente
¿¡¿Espere?!? ¿Qué? ¡Aprovecho los nombres de mis modelos todo el tiempo! ¿Qué "problemas" estás viendo?
Meltemi
2
No estoy hablando del nombre de su modelo, sino del nombre 'Modelo'. Traté de crear un modelo como este: rails g Título del producto del modelo: cadena y obtuve: No se pudo encontrar el modelo del generador. así que lo intenté así: rieles g título del producto modelo: cadena y funcionó.
Victor Augusto
1
Ah No había encontrado ese b4. ¡Buen consejo!
Meltemi
2
(El problema no es el nombre del modelo, es la palabra modelque se refiere al generador. rails g model Product …Está bien).
Asherah
0

Es muy simple en ROR crear un modelo que haga referencia a otro.

rieles modelo g Nombre del elemento: descripción de la cadena: producto de texto: referencias

Este código agregará la columna 'product_id' en la tabla Item

chandanjha
fuente
0

Hay muchos tipos de datos que puede mencionar al crear el modelo, algunos ejemplos son:

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

sintaxis:

field_type:data_type
chandanjha
fuente
0

Tuve el mismo problema, pero mi código era un poco diferente.

def new
 @project = Project.new
end

Y mi forma se veía así:

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

Eso era totalmente correcto, así que no sabía cómo resolverlo.

Finalmente, solo agrego

url: { projects: :create }

después

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

trabajó para mi.

justinedps26
fuente
Esta puede ser una buena respuesta, pero no estoy seguro de cómo se relaciona con el PO, que se trata de tipos de campo ( :integer, :string, etc ...).
Meltemi