Как использовать длинный идентификатор в приложениях направляющих?

Swift 4

String(Array(stringToIndex)[index]) 

Это, вероятно, лучший способ решения этой проблемы за один раз. Вы, вероятно, хотите сначала привести String как массив, а затем снова привести результат как String. В противном случае, символ будет возвращен вместо строки.

Пример String(Array("HelloThere")[1]) вернет «е» в виде строки.

(Array("HelloThere")[1] вернет «е» как символ.

Swift не позволяет индексировать строки как массивы, но это делает работу в стиле грубой силы.

38
задан nessur 1 December 2011 в 19:40
поделиться

3 ответа

Это сложно установить для первичного ключа с миграциями, потому что Rails вставляет его автоматически.

Вы можете изменить любой столбец позже следующим образом:

change_column: foobars,: something_id, 'bigint'

Вы можете указать непервичные идентификаторы в качестве настраиваемых типов при начальной миграции следующим образом:

create_table :tweets do |t|
  t.column :twitter_id, 'bigint'
  t.column :twitter_in_reply_to_status_id, 'bigint'
end

Где я с "bigint" вы можете поместить любой текст, который ваша база данных будет использовать для типа столбца базы данных, который вы хотите использовать (например, "unsigned long").

Если вам нужно, чтобы ваш столбец идентификатора был bigint, самый простой способ сделать это было бы для создания таблицы, а затем изменить столбец в той же миграции с помощью change_column.

В PostgreSQL и SQLite изменения схемы являются атомарными, так что это не оставит вашу базу данных в странном состоянии в случае сбоя миграции. С MySQL нужно быть более осторожным.

7
ответ дан 27 November 2019 в 03:07
поделиться

Согласно документации Rails API, возможные варианты для типа:

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

Вы можете использовать: decimal, или вы можете выполнить команду напрямую, если вам нужно:

class MyMigration
  def self.up
    execute "ALTER TABLE my_table ADD id LONG"
  end
end

Как wappos Как уже отмечалось, вы можете использовать дополнительные параметры, например: limit, чтобы сообщить ActiveRecord, какой размер столбца вы хотите получить. Таким образом, вы должны использовать столбец: int с большим: limit.

6
ответ дан 27 November 2019 в 03:07
поделиться

Чтобы установить тип столбца первичного ключа по умолчанию , файлы миграции не то место, с которым можно возиться.

Вместо этого просто приклейте это в нижней части config / environment.rb

ActiveRecord::ConnectionAdapters::MysqlAdapter::NATIVE_DATABASE_TYPES[:primary_key] = "BIGINT UNSIGNED DEFAULT NULL auto_increment PRIMARY KEY"

И все ваши таблицы должны быть созданы с предполагаемым типом столбца для id :

+--------------+---------------------+------+-----+---------+----------------+
| Field        | Type                | Null | Key | Default | Extra          |
+--------------+---------------------+------+-----+---------+----------------+
| id           | bigint(20) unsigned | NO   | PRI | NULL    | auto_increment | 

После того, как вы сделаете то, что намеревались сделать ... следующий вопрос, вероятно, будет: «Как сделать столбцы внешнего ключа одного и того же типа?» поскольку нет смысла иметь первичный ключ people.id как bigint (20) unsigned , а person_id be int (11) ] или что-нибудь еще?

Для этих столбцов вы можете обратиться к другим предложениям, например,

t.column :author_id, 'BIGINT UNSIGNED'
t.integer :author_id, :limit => 8

UPDATE : @Notinlist, чтобы использовать произвольный столбец для первичного ключа в произвольных таблицах, вам нужно выполнить танец create_table-change_column :

create_table(:users) do |t|
  # column definitions here..
end
change_column :users, :id, :float # or some other column type

например, если бы я хотел guid вместо целых чисел с автоинкрементом,

create_table(:users, :primary_key => 'guid') do |t|
  # column definitions here..
end
change_column :users, :guid, :string, :limit => 36
43
ответ дан 27 November 2019 в 03:07
поделиться
Другие вопросы по тегам:

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