2010-03-26 4 views
2

В моем приложении много мест, где мне нужно создавать ссылки с уникальными токенами (foo.com/g6Ce7sDygw или что-то еще). Каждая ссылка может быть связана с некоторыми данными сеанса и приведет пользователя к определенному контроллеру/действию.Плагин Rails для создания уникальных ссылок?

Кто-нибудь знает о самоцвете/плагине, который это делает? Его достаточно просто реализовать, но он будет более чистым, без необходимости писать его с нуля для каждого приложения.

ответ

0

Мне нужно было подумать, что нужно, и я реализовал его сам. Я не знаю ни о каком плагине, который делает то, что вы хотите. Как вы писали, реализовать это не так сложно. Вот мое решение:

  1. Поскольку я не хотел использовать UUID (потому что он закодирован с шестнадцатеричным). Мне нужен случайный буквенно-цифровой текст с большими и маленькими буквами. Я добавил этот метод класса Струнный:

    def String.random_alphanumeric(size=20) 
        s = "" 
    size.times { s << (i = Kernel.rand(62); i += ((i < 10) ? 48 : ((i < 36) ? 55 : 61))).chr } 
        s 
    end 
    

    С его помощью вы можете создать ссылку с стоимость создания эксклюзивной:

    link = String.random_alphanumeric 
    

    В качестве параметра вы можете установить размер желаемой строки.

  2. Еще одна важная вещь - поиск этой строки в db. Я использую MySQL и по умолчанию он не чувствителен к регистру, поэтому я добавил метод поиска моей модели UniqueLink:

    def self.find_uid(search_for) 
        find_by_sql("SELECT * FROM workshop_application_unique_ids where uid = '#{search_for}' COLLATE utf8_bin ORDER BY created_at DESC").first 
    end 
    

Надеется, что это помогает!

+0

Nice. Более «компактный», используя более разные символы. –

+0

Как это проще, чем использовать uuidtools? –

+1

@mplacona: Я не знаю, проще ли это или сложнее, чем с uuid. Это другое. Для меня это лучше, потому что я хотел использовать символы: a-z A-Z 0-9, а не только шестнадцатеричные числа, как в uuid. Поскольку в вопросе был пример 'foo.com/g6Ce7sDygw', я думал, что это будет лучше, чем uuid. Добавление этого метода «random_alphanumeric» так же просто, как установка другого драгоценного камня. – klew

Смежные вопросы