2013-10-13 1 views
1

Je veux créer le modèle suivant:Rails: index partiel Multicolumn avec contrainte sur une colonne

create_table "item_groups", force: true do |t| 
    t.string "name",       null: false 
    t.integer "locale_id",     null: false 
    t.boolean "translated", default: false, null: false 
    end 

Comment puis-je ajouter un index de plusieurs colonnes que seuls les index où = true (traduit Postgres). Je suppose que ce serait un peu comme regarder ceci:

add_index "item_groups", ["translated", "locale_id"], name: "item_groups_translated_locale_id", where: "translated = true", using: :btree 

Mise à jour

J'utilise Rails 4. Est-ce la syntaxe correcte ci-dessus?

Mise à jour 2

j'ai changé la syntaxe à

add_index "item_groups", ["translated", "locale_id"], name: "item_groups_translated_locale_id", where: "(translated IS TRUE)", using: :btree 

Plus d'informations sur la réponse de Edgars Jekabsons ci-dessous et sur https://coderwall.com/p/9hxejg

Répondre

2

Je comprends votre douleur, il est toujours pas pris en charge dans la vanille AR version 3.2. J'ai utilisé pg_power gem pour plusieurs projets qui permet de le faire. Je vous encourage fortement à vérifier: https://github.com/TMXCredit/pg_power

Mais vous devriez être en mesure de le faire dans Rails 4 hors de la boîte.

+0

Merci pour votre réponse. J'utilise Rails 4. La syntaxe que j'ai posté est-elle correcte? – migu

+0

Oui. Vérifiez le lien que je vous ai donné, ils ont utilisé la requête Rails 4 pull pour mettre en œuvre la même chose dans leur gemme, donc il devrait être compatible à 100%. –

+0

L'a changé en 'où: (traduit IS TRUE)" ' – migu

Questions connexes