Rails Routes - Как сделать их нечувствительными к регистру?

Этот вопрос старый, но я нашел способ поиска заданного запроса его имена полей динамическим способом (не обязательно только поля таблицы). И поскольку люди продолжают указывать это как ответ на эту заданную задачу в других связанных вопросах, я разделяю то, как я нашел, что это можно сделать, используя советы Гевина Симпсона:

//Function to generate a HTML table from a SQL query
function myTable($obConn,$sql)
{
    $rsResult = mysqli_query($obConn, $sql) or die(mysqli_error($obConn));
    if(mysqli_num_rows($rsResult)>0)
    {
        //We start with header. >>>Here we retrieve the field names<<<
        echo "<table width=\"100%\" border=\"0\" cellspacing=\"2\" cellpadding=\"0\"><tr align=\"center\" bgcolor=\"#CCCCCC\">";
        $i = 0;
        while ($i < mysqli_num_fields($rsResult)){
           $field = mysqli_fetch_field_direct($rsResult, $i);
           $fieldName=$field->name;
           echo "<td><strong>$fieldName</strong></td>";
           $i = $i + 1;
        }
        echo "</tr>"; 
        //>>>Field names retrieved<<<

        //We dump info
        $bolWhite=true;
        while ($row = mysqli_fetch_assoc($rsResult)) {
            echo $bolWhite ? "<tr bgcolor=\"#CCCCCC\">" : "<tr bgcolor=\"#FFF\">";
            $bolWhite=!$bolWhite;
            foreach($row as $data) {
                echo "<td>$data</td>";
            }
            echo "</tr>";
        }
        echo "</table>";
    }
}

Это может быть легко moded, чтобы вставить имена полей в массив.

С помощью простого: $sql="SELECT * FROM myTable LIMIT 1" может предоставить вам поля любой таблицы, без необходимости использовать SHOW COLUMNS или любой дополнительный php-модуль, если необходимо (удаление часть дампа данных).

Надеюсь, это поможет кому-то еще.

10
задан John Topley 18 February 2010 в 20:27
поделиться

5 ответов

У меня такая же проблема, и я решил ее с помощью промежуточного программного обеспечения - посмотрите здесь:

http://gehling.dk/2010 / 02 / how-to-rails-routing-case-indensitive /

Примечание. Это применимо только для Rails 2.3+

  • Carsten
7
ответ дан 3 December 2019 в 16:29
поделиться

Маршруты в Rails чувствительны к регистру, потому что URL-адреса чувствительны к регистру. Из W3C :

URL-адреса, как правило, чувствительны к регистру (за исключением имен компьютеров). Могут быть URL-адреса или части URL-адресов, { {1}}, где регистр не имеет значения, но определить их может быть непросто. Пользователи всегда должны учитывать, что URL-адреса чувствительны к регистру.

11
ответ дан 3 December 2019 в 16:29
поделиться

Ну, вы могли бы попробовать другой подход. Сделайте преобразование корпуса на стороне сервера и отправьте все на рельсы вниз.

Я думаю, вы можете добиться этого с помощью mod_rewrite или mod_spelling.

3
ответ дан 3 December 2019 в 16:29
поделиться

Иногда вам нужно пройти тестирование на нескольких версиях, или вам может понадобиться 2005 год для одной вещи, а 2008 год для другой.

Иногда вы поддерживаете несколько различных приложений, некоторые из которых находятся в одном, а некоторые - в другом, и вы еще не обновили все. Иногда выполняется обновление, и во время модернизации необходимо протестировать обе версии. Иногда вы поддерживаете несколько различных клиентов, некоторые на одной версии и некоторые на другой. Иногда требуется обновить внутренние приложения, но используется пакет программного обеспечения, сертифицированный только на более старой версии.

Есть много причин.

-121--4907639-

Это может быть проще, но это работает:

--CREATE TABLE temptest
--(
--  date1 DATETIME,
--  stat nvarchar(10)
--)

--INSERT INTO temptest
--VALUES 
--('2009-01-01 12:00:00','OK'),
--('2009-01-01 12:03:00','FAILED'),
--('2009-01-01 12:04:00','OK'),
--('2009-01-01 12:06:20','OK'),
--('2009-01-01 12:07:35','FAILED'),
--('2009-01-01 12:07:40','FAILED'),
--('2009-01-01 12:20:40','FAILED'),
--('2009-01-01 12:25:40','OK')

SELECT
    stat,
    COUNT(1),
    YEAR(date1),
    MONTH(date1),
    DAY(date1),
    DATEPART(hh,date1),
    ROUND(DATEPART(MINUTE,date1)/10,0)
FROM temptest
GROUP BY stat, YEAR(date1), MONTH(date1), DAY(date1), DATEPART(hh,date1), ROUND(DATEPART(MINUTE,date1)/10,0)
-121--4055746-

Хотя URL-адреса чувствительны к регистру, если вы хотите сделать ваши маршруты без регистра, есть грязный взлом, который вы можете сделать.

На application_controller.rb месте:

rescue_from ActionController::RoutingError do |exception|
 redirect_to request.url.downcase
end

Но на самом деле не делайте этого. Создается цикл перенаправления для любых несуществующих маршрутов. Вы действительно должны проанализировать request.request_uri в его компоненты, опустить их и использовать их для создания законного маршрута, на который вы перенаправляете. Как я уже говорил, это грязный взлом. Тем не менее, я думаю, что это лучше, чем сделать вашу карту маршрута уродливой и халтурной.

0
ответ дан 3 December 2019 в 16:29
поделиться

просто подправьте его, чтобы он по умолчанию понижал регистр. простой пример:

module ActionController
  module Caching
    module Pages
      def cache_page(content = nil, options = nil)
        return unless perform_caching && caching_allowed

        path = case options
          when Hash
            url_for(options.merge(:only_path => true, :skip_relative_url_root => true, :format => params[:format]))
          when String
            options
          else
            request.path
        end

        path = path.downcase

        self.class.cache_page(content || response.body, path)
      end
    end
  end
end
2
ответ дан 3 December 2019 в 16:29
поделиться
Другие вопросы по тегам:

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