web-dev-qa-db-fra.com

Créer une nouvelle table dans Ruby on rails

J'essaie de créer une nouvelle table dans Rails. Tous les exemples que je trouve et que j'essaye ne fonctionnent malheureusement pas avec moi .... C'est donc ce que j'ai déjà essayé:

Rails generate model content content_id:auto-generated, law_id:integer, parent_id:integer, titel:string, text:string, content:string, url:string

qui a généré le code suivant:

class CreateContents < ActiveRecord::Migration
  def change
    create_table :contents do |t|
      t.auto-generated, :content_id
      t.integer, :law_id
      t.integer, :parent_id
      t.string, :titel
      t.string, :text
      t.string, :content
      t.string :url

      t.timestamps
    end
  end
end

si j'essaie de rake db: migrate j'obtiens le message d'erreur suivant:

 syntax error, unexpected ',', expecting keyword_end
      t.auto-generated, :content_id
                       ^

si je supprime le "," je reçois ce message d'erreur:

syntax error, unexpected tSYMBEG, expecting keyword_do or '{' or '('
      t.auto-generated :content_id
                        ^

mes recherches m'ont amené aussi à cette façon de créer une table:

class CreateContents < ActiveRecord::Migration
  def change
    create_table :contents do |t|
      t.auto-generated "content_id"
      t.integer "law_id"
      t.integer "parent_id"
      t.string "titel"
      t.string "text"
      t.string "content"
      t.string "url"

      t.timestamps
    end
  end
end

si j'essaie de ratisser la base de données avec cet exemple, je reçois le message d'erreur suivant:

syntax error, unexpected tSTRING_BEG, expecting keyword_do or '{' or '('
      t.auto-generated "content_id"
                        ^

Qu'est-ce que je fais mal? 

16
Eumundi

auto-generated n'est pas un type de colonne pris en charge.

Active Record prend en charge les types de colonne de base de données suivants:

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

Plus d'infos dans http://guides.rubyonrails.org/migrations.html#supported-types

Rails créera automatiquement l’identifiant de colonne, modifiez donc votre migration comme suit:

class CreateContents < ActiveRecord::Migration
  def change
    create_table :contents do |t|
      t.integer "law_id"
      t.integer "parent_id"
      t.string "titel"
      t.string "text"
      t.string "content"
      t.string "url"

      t.timestamps
    end
  end
end
18
Luís Ramalho

Comme le disent d'autres personnes, :auto-generated n'est pas un type de colonne pris en charge. De plus, ce n'est pas un symbole , c'est une expression et il est analysé comme suit: :auto - generated.

1
giorgian

Ne mettez pas de virgules dans votre appel de ligne de commande au générateur Rails, c’est ce qui les met dans votre migration.

0
webdevguy