如何在迁移中的表中创建“collat​​e nocase”列?

时间:2012-06-26 07:39:54

标签: ruby-on-rails sqlite migration collation

对问题的回答https://stackoverflow.com/a/973785/1297371How to set Sqlite3 to be case insensitive when string comparing? 讲述如何使用“COLLATE NOCASE”列创建表。

我的问题是如何在rails迁移中创建这样的列? 即如何来自

create table Test
(
  Text_Value  text collate nocase
);

create index Test_Text_Value_Index
  on Test (Text_Value collate nocase);

做的:

create_table :tests do
  #WHAT HERE?
end
add_index #... WHAT HERE?

2 个答案:

答案 0 :(得分:0)

我添加了新的迁移,删除并重新创建了索引,如:

class AddIndexToWordVariations < ActiveRecord::Migration

  def change

    remove_index :word_variations, :variation_word

    add_index :word_variations, :variation_word, :COLLATE => :NOCASE

  end

end

其中'word_variations'是我的表

答案 1 :(得分:0)

对于搜索的人来说,如果您的rails版本中仍然没有“collat​​e”(您将获得“Unknown key :: COLLATE”),那么您必须手动创建索引:

<?php

    if( !empty($_POST['entry_508642568']) ) {

        $myfile = fopen("testfile.txt", "a") or die("Unable to open file!");
        $txt =  "postcode" . $_POST['entry_508642568'];
        echo $txt;
        fwrite($myfile, "\n". $txt);
        fclose($myfile);
    }

?>

在你的'def up'中('drop_table'会在你的'def down'中删除索引)