Ruby on Rails génère le champ modèle: type - quelles sont les options pour champ: type?


308

J'essaie de générer un nouveau modèle et d'oublier la syntaxe pour référencer l'ID d'un autre modèle. Je le rechercherais moi-même, mais je n'ai pas compris, parmi tous mes liens de documentation Ruby on Rails, comment trouver la source définitive.

$ rails g model Item name:string description:text(et ici soit reference:productou references:product). Mais la meilleure question est de savoir ou comment rechercher facilement ce genre de bêtise à l'avenir?

Remarque: J'ai appris à la dure que si je saisis mal l'une de ces options et que j'exécute ma migration, Ruby on Rails va complètement visser ma base de données ... et rake db:rollbackest impuissant face à de tels bousculades. Je suis sûr que je ne comprends tout simplement pas quelque chose, mais jusqu'à ce que je le fasse ... les informations "détaillées" retournées par rails g modelme laissent encore grattant ...


Qu'en est-il de: uniq et: options de champ d'index? Comme dans "corps de titre du modèle rails g: texte tracking_id: entier: uniq". Je n'ai pas pu trouver de documentation pour cela. Y en a-t-il d'autres?
Kangur

11
rails generate model --help
Dennis

1
L'utilisation d'un contrôle de version vous fournirait un moyen simple de restaurer tous les fichiers générés. Et si le problème est dans la base de données ... eh bien, vous pouvez toujours faire db: schema: load
Hector Ordonez

1
Eh bien, il a été vu plus de 140 000 fois et 243 personnes l'ont trouvé utile, ce n'est donc pas une question idiote par tous les moyens :)
BKSpurgeon

Réponses:


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

Voir la section des définitions de tableau .


13
hmm ... aucune mention :referenceou :referencesdans votre réponse ou une explication sur la façon de le transmettre aux générateurs dans le lien que vous avez fourni?!?
Meltemi

53
Cela ne répond pas du tout à la question.
MikeEL

1
Sélectionnez cela comme réponse, mais sachez que : les références sont également une option.
Meltemi

14
Existe-t-il une documentation qui définit réellement ces types de colonnes? Par exemple, en quoi stringdiffère- textt-il de ?
Grant Birchmeier

3
@Kangur les suffixes uniqet index(et tous les types) sont documentés dans l'utilisation de rails generate model. Exécutez rails g modelpour voir les documents d'utilisation.
Dennis

188

Pour créer un modèle qui en référence un autre, utilisez le générateur de modèle Ruby on Rails:

$ rails g model wheel car:references

Cela produit app / models / wheel.rb :

class Wheel < ActiveRecord::Base
  belongs_to :car
end

Et ajoute la migration suivante:

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

Lorsque vous exécutez la migration, les éléments suivants se retrouveront dans votre 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 ce qui concerne la documentation, un point de départ pour les générateurs de rails est Ruby on Rails: un guide de la ligne de commande Rails qui vous pointe vers la documentation API pour en savoir plus sur les types de champs disponibles.


4
légèrement dépassé avec le commentaire, mais c'est la réponse à cette question. +1
omninonsense

7

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

Moi aussi, j'ai trouvé les guides difficiles à utiliser. Facile à comprendre, mais difficile à trouver ce que je cherche.

De plus, j'ai des projets temporaires sur lesquels j'exécute les rails generatecommandes. Ensuite, une fois que je les fais travailler, je les exécute sur mon vrai projet.

Référence pour le code ci-dessus: http://guides.rubyonrails.org/getting_started.html#associating-models


3

N'oubliez pas de ne pas mettre en majuscule votre texte lors de l'écriture de cette commande. Par exemple:

Écris:

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

N'écris pas:

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

Au moins, c'était un problème pour moi.


Attendre?!? Quoi? Je capitalise tout le temps les noms de mes modèles! Quels "problèmes" voyez-vous?
Meltemi

2
Je ne parle pas du nom de votre modèle, mais du nom «Model». J'ai essayé de créer un modèle comme celui-ci: rails g Titre du produit du modèle: chaîne et j'ai obtenu: Impossible de trouver le modèle du générateur. donc je l'ai essayé comme ça: rails g modèle titre du produit: chaîne et cela a fonctionné.
Victor Augusto

1
Ah. N'avait pas rencontré ce b4. Bon conseil!
Meltemi

2
(Ce n'est pas le nom du modèle qui est en cause, c'est le mot modelqui fait référence au générateur. Ça va rails g model Product ….)
Asherah


0

Il est très simple dans ROR de créer un modèle qui référence d'autres.

rails modèle g Nom de l'élément: chaîne description: texte produit: références

Ce code ajoutera la colonne 'product_id' dans la table Item


0

Il existe de nombreux types de données que vous pouvez mentionner lors de la création d'un modèle, par exemple:

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

syntaxe:

field_type:data_type

0

J'ai eu le même problème, mais mon code était un peu différent.

def new
 @project = Project.new
end

Et ma forme ressemblait à ceci:

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

C'était totalement correct, donc je ne savais pas comment le comprendre.

Enfin, il suffit d'ajouter

url: { projects: :create }

après

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

travaillé pour moi.


Cela peut être une bonne réponse , mais je ne sais pas comment il se rapporte à l'OP qui est sur les types de terrain ( :integer, :string, etc ...).
Meltemi
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.