В чем разница между типами & ldquo; string & rdquo; и & ldquo; func () string & rdquo ;?

Поскольку индексы MySQL уже не учитывают регистр, я предполагаю, что вы имеете дело с PostgreSQL, который по умолчанию создает индексы с учетом регистра. Я отвечаю здесь на основе Rails 3.2.3 и PostgreSQL 8.4.

Кажется, функциональные индексы - еще один пример того, что ActiveRecord не может генерировать. Внешние ключи и столбцы UUID - еще два, которые приходят на ум. Таким образом, нет выбора (кроме использования ActiveRecord для обезьян), но для использования execute операторов.

Это означает, что для точного дампа вашей базы данных вам нужно отказаться от схемы агностиков DB. rb в пользу структуры DB-specific.sql. См. Руководство по Rails по переходам, раздел 6.2 Типы дампов схемы . Это устанавливается следующим образом:

config / application.rb

config.active_record.schema_format = :sql

db / structure.sql следует обновлять автоматически при выполнении миграции. Вы можете сгенерировать его вручную с помощью этой команды:

rake db:structure:dump

Файл является чистым Postgres SQL. Несмотря на то, что вы не указали, когда используете rake -T для списка задач рейка, кажется, что вы можете использовать эту команду для загрузки базы данных из файла struct.sql:

rake db:structure:load

Здесь нет ничего волшебного: [ исходный код (показано здесь из Rails 3.2.16) просто вызывает psql на struct.sql.

Наконец, вот моя миграция, чтобы удалить старое, чувствительное к регистру ограничение по электронной почте и добавить функциональный индекс, чувствительный к регистру:

class FixEmailUniqueIndexOnUsers < ActiveRecord::Migration
  def up
    remove_index :users, :email
    execute "CREATE UNIQUE INDEX index_users_on_lowercase_email 
             ON users USING btree (lower(email));"
  end

  def down
    execute "DROP INDEX index_users_on_lowercase_email;"
    add_index :users, :email, :unique => true
  end
end

-4
задан JWD42 17 January 2019 в 17:27
поделиться

3 ответа

Меня раздражает, что я забыл, что хотел получить возвращаемый результат функции и должен был добавить в конце скобку null () ... Я имею в виду, что работал над этим смущающе долго, чтобы этого никогда не было щелкнуть в моей голове ... и он находится прямо рядом с другими правильными вызовами функций буквально перед моим лицом.

0
ответ дан JWD42 17 January 2019 в 17:27
поделиться

Квалифицированный идентификатор encodedjs.ReadEncodedJS просто обозначает функцию, если используется как есть, это просто значение функции (например, может быть назначено переменным одного и того же типа функции).

Если вы хотите вызвать его и использовать возвращаемое значение, используйте скобки, например, encodedjs.ReadEncodedJS(). Это подробно описано в Spec: Calls .

Поскольку вы хотите объединить string значения, вы должны вызвать его:

js := "some text to simply show one way I've tried" + encodedjs.ReadEncodedJS()
0
ответ дан icza 17 January 2019 в 17:27
поделиться

string - это string, а func() string - это функция, которая возвращает string. Мне кажется, что encodedjs.ReadEncodedJS является последним, и чтобы получить string, который он возвращает, вы должны написать encodedjs.ReadEncodedJS().

0
ответ дан cholz 17 January 2019 в 17:27
поделиться
Другие вопросы по тегам:

Похожие вопросы: