web-dev-qa-db-fra.com

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

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 cherchais moi-même, mais je n'ai pas trouvé, parmi tous mes Ruby sur Rails liens de documentation, comment trouver la source définitive.

$ Rails g model Item name:string description:text (et ici soit reference:product ou references:product). Mais la meilleure question est ou comment puis-je facilement rechercher ce genre de sottise?

Note: J'ai appris à la dure que si je me trompe dans l'une de ces options et lancez ma migration alors Ruby sur Rails va totalement bousiller ma base de données ... et rake db:rollback est impuissant face à de telles erreurs. 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" renvoyées par Rails g model me laissent tout de même gratter ...

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

Voir la section définitions de table .

471
Paul Schreiber

Pour créer un modèle qui en référence un autre, utilisez le générateur de modèles Ruby sur 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écuterez 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 Rails est Ruby on Rails: Guide de la ligne de commande Rails qui vous indique API Documentation pour en savoir plus sur les types de champs disponibles.

187
Troy

$ 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 je lance les commandes Rails generate. Puis, une fois que je les fais travailler, je l'exécute sur mon vrai projet.

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

7
B Seven

http://guides.rubyonrails.org devrait être un bon site si vous essayez de parcourir les éléments de base dans Ruby sur Rails.

Voici un lien pour associer des modèles pendant que vous les générez: http://guides.rubyonrails.org/getting_started.html#associating-models

3
Raghu

N'oubliez pas de ne pas mettre votre texte en majuscule lorsque vous écrivez cette commande. Par exemple:

Écrivez:

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

Ne pas écrire:

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

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

3
Victor Augusto

Dans ROR, il est très simple de créer un modèle qui référence les autres.

Rails g model Nom de l'article: description de la chaîne: produit textuel: références

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

0
chandanjha

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, alors je ne savais pas comment le comprendre.

Enfin, ajouter url: { projects: :create } après <%= form-for @project a fonctionné pour moi.

0
justinedps26